{
  "contractName": "CheckpointedToken",
  "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": [],
      "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": [],
      "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": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "checkpointId",
          "type": "uint256"
        }
      ],
      "name": "getHoldersAt",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "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": [],
      "name": "getNumberOfHolders",
      "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": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "totalSupplyAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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\":[],\"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\":\"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\":[],\"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\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"balanceOfAt(address,uint256)\":{\"params\":{\"holder\":\"Holder to query balance for\",\"timestamp\":\"Timestamp of the balance checkpoint\"}},\"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`.\"},\"getHoldersAt(uint256)\":{\"params\":{\"checkpointId\":\"Checkpoint id at which holder list is to be populated\"},\"returns\":{\"_0\":\"list of holders\"}},\"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.\"},\"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`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"balanceOfAt(address,uint256)\":{\"notice\":\"Queries the balances of a holder at a specific timestamp\"},\"getHoldersAt(uint256)\":{\"notice\":\"returns an array of holders with non zero balance at a given checkpoint\"},\"initialize(string,string)\":{\"notice\":\"Initialize a new instance storage\"},\"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/CheckpointedToken/CheckpointedToken.sol\":\"CheckpointedToken\"},\"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\"]},\"@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\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50611775806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80634cd88b76116100a257806395d89b411161007157806395d89b4114610227578063981b24d01461022f578063a457c2d714610242578063a9059cbb14610255578063dd62ed3e1461026857610116565b80634cd88b76146101d95780634ee2cd7e146101ee578063520fdd221461020157806370a082311461021457610116565b806323b872dd116100e957806323b872dd14610176578063308feec314610189578063313ce5671461019157806331801925146101a657806339509351146101c657610116565b806306fdde031461011b578063095ea7b31461013957806318160ddd146101595780631aab9a9f1461016e575b600080fd5b61012361027b565b60405161013091906114ba565b60405180910390f35b61014c610147366004611394565b610312565b60405161013091906114af565b610161610330565b60405161013091906116a0565b610161610336565b61014c610184366004611354565b61033c565b6101616103c9565b6101996103cf565b60405161013091906116a9565b6101b96101b4366004611437565b6103d8565b6040516101309190611462565b61014c6101d4366004611394565b6105ef565b6101ec6101e73660046113be565b610643565b005b6101616101fc366004611394565b6106db565b6101b961020f36600461141f565b610704565b610161610222366004611305565b6108b8565b6101236108d3565b61016161023d36600461141f565b610934565b61014c610250366004611394565b610941565b61014c610263366004611394565b6109af565b610161610276366004611320565b6109c3565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103075780601f106102dc57610100808354040283529160200191610307565b820191906000526020600020905b8154815290600101906020018083116102ea57829003601f168201915b505050505090505b90565b600061032661031f6109ee565b84846109f2565b5060015b92915050565b60675490565b609b5481565b6000610349848484610aa6565b6103bf846103556109ee565b6103ba856040518060600160405280602881526020016116f3602891396001600160a01b038a166000908152606660205260408120906103936109ee565b6001600160a01b03168152602081019190915260400160002054919063ffffffff610abc16565b6109f2565b5060019392505050565b60995490565b606a5460ff1690565b6099546060908083106103ed578390036103f5565b506001838303015b60608167ffffffffffffffff8111801561040e57600080fd5b50604051908082528060200260200182016040528015610438578160200160208202803683370190505b50905060005b8281101561049f5760998682018154811061045557fe5b9060005260206000200160009054906101000a90046001600160a01b031682828151811061047f57fe5b6001600160a01b039092166020928302919091019091015260010161043e565b506000805b82518110156105145760006104cc8483815181106104be57fe5b60200260200101518a6106db565b11156104dd5760019091019061050c565b60008382815181106104eb57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6001016104a4565b60608267ffffffffffffffff8111801561052d57600080fd5b50604051908082528060200260200182016040528015610557578160200160208202803683370190505b50905060009250600091505b83518210156105e35760006001600160a01b031684838151811061058357fe5b60200260200101516001600160a01b0316146105d8578382815181106105a557fe5b60200260200101518184815181106105b957fe5b6001600160a01b03909216602092830291909101909101526001909201915b600190910190610563565b98975050505050505050565b60006103266105fc6109ee565b846103ba856066600061060d6109ee565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff610ae816565b600054610100900460ff168061065c575061065c610b0d565b8061066a575060005460ff16155b61068f5760405162461bcd60e51b8152600401610686906115c9565b60405180910390fd5b600054610100900460ff161580156106ba576000805460ff1961ff0019909116610100171660011790555b6106c48383610b13565b80156106d6576000805461ff00191690555b505050565b6001600160a01b03821660009081526098602052604081206106fd9083610b93565b9392505050565b60606000806060609980548060200260200160405190810160405280929190818152602001828054801561076157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610743575b50505050509050600091505b80518210156107e057600061079582848151811061078757fe5b6020026020010151876106db565b11156107a6576001909201916107d5565b60008183815181106107b457fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b60019091019061076d565b60608367ffffffffffffffff811180156107f957600080fd5b50604051908082528060200260200182016040528015610823578160200160208202803683370190505b50905060009350600092505b81518310156108af5760006001600160a01b031682848151811061084f57fe5b60200260200101516001600160a01b0316146108a45781838151811061087157fe5b602002602001015181858151811061088557fe5b6001600160a01b03909216602092830291909101909101526001909301925b60019092019161082f565b95945050505050565b6001600160a01b031660009081526065602052604090205490565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103075780601f106102dc57610100808354040283529160200191610307565b600061032a609783610b93565b600061032661094e6109ee565b846103ba8560405180606001604052806025815260200161171b60259139606660006109786109ee565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff610abc16565b60006103266109bc6109ee565b8484610aa6565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b3390565b6001600160a01b038316610a185760405162461bcd60e51b81526004016106869061165c565b6001600160a01b038216610a3e5760405162461bcd60e51b815260040161068690611550565b6001600160a01b0380841660008181526066602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610a999085906116a0565b60405180910390a3505050565b610ab1838383610cbf565b6106d6838383610de0565b60008184841115610ae05760405162461bcd60e51b815260040161068691906114ba565b505050900390565b6000828201838110156106fd5760405162461bcd60e51b815260040161068690611592565b303b1590565b600054610100900460ff1680610b2c5750610b2c610b0d565b80610b3a575060005460ff16155b610b565760405162461bcd60e51b8152600401610686906115c9565b600054610100900460ff16158015610b81576000805460ff1961ff0019909116610100171660011790555b610b89610e05565b6106c48383610e88565b8154600090610ba45750600061032a565b825483906000198101908110610bb657fe5b60009182526020909120600290910201546001600160801b03168210610c0157825483906000198101908110610be857fe5b906000526020600020906002020160010154905061032a565b82600081548110610c0e57fe5b60009182526020909120600290910201546001600160801b0316821015610c375750600061032a565b8254600090600019015b81811115610c97576000600260018385010104905084868281548110610c6357fe5b60009182526020909120600290910201546001600160801b031611610c8a57809250610c91565b6001810391505b50610c41565b848281548110610ca357fe5b9060005260206000209060020201600101549250505092915050565b6001600160a01b038316610ce55760405162461bcd60e51b815260040161068690611617565b6001600160a01b038216610d0b5760405162461bcd60e51b81526004016106869061150d565b610d168383836106d6565b610d59816040518060600160405280602681526020016116cd602691396001600160a01b038616600090815260656020526040902054919063ffffffff610abc16565b6001600160a01b038085166000908152606560205260408082209390935590841681522054610d8e908263ffffffff610ae816565b6001600160a01b0380841660008181526065602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610a999085906116a0565b610deb838383610f41565b610df3611040565b610dfc83611054565b6106d682611054565b600054610100900460ff1680610e1e5750610e1e610b0d565b80610e2c575060005460ff16155b610e485760405162461bcd60e51b8152600401610686906115c9565b600054610100900460ff16158015610e73576000805460ff1961ff0019909116610100171660011790555b8015610e85576000805461ff00191690555b50565b600054610100900460ff1680610ea15750610ea1610b0d565b80610eaf575060005460ff16155b610ecb5760405162461bcd60e51b8152600401610686906115c9565b600054610100900460ff16158015610ef6576000805460ff1961ff0019909116610100171660011790555b8251610f099060689060208601906111d8565b508151610f1d9060699060208501906111d8565b50606a805460ff1916601217905580156106d6576000805461ff0019169055505050565b801580610f5f5750816001600160a01b0316836001600160a01b0316145b15610f69576106d6565b610f72826108b8565b158015610f8757506001600160a01b03821615155b1561101457609b54610fa090600163ffffffff610ae816565b609b55610fac82611079565b611014576099805460018082019092557f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d000180546001600160a01b0319166001600160a01b0385169081179091556000908152609a60205260409020805460ff191690911790555b61101d836108b8565b8114156106d657609b5461103890600163ffffffff61109716565b609b55505050565b611052609761104d610330565b6110d9565b565b6001600160a01b0381166000908152609860205260409020610e859061104d836108b8565b6001600160a01b03166000908152609a602052604090205460ff1690565b60006106fd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610abc565b8154158061111157508154829060001981019081106110f457fe5b60009182526020909120600290910201546001600160801b031642115b156111a757604080518082018252426001600160801b039081168252602080830185815286546001808201895560008981529384209551600290920290950180546fffffffffffffffffffffffffffffffff1916919094161783555191909201558354915160001992909201917f76735e462dae5480c552f970568dc60e35cc3c4c06eb818f77bbb357593bf7fa9190a26111d4565b8154600090839060001981019081106111bc57fe5b60009182526020909120600160029092020101829055505b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061121957805160ff1916838001178555611246565b82800160010185558215611246579182015b8281111561124657825182559160200191906001019061122b565b50611252929150611256565b5090565b61030f91905b80821115611252576000815560010161125c565b80356001600160a01b038116811461032a57600080fd5b600082601f830112611297578081fd5b813567ffffffffffffffff808211156112ae578283fd5b604051601f8301601f1916810160200182811182821017156112ce578485fd5b6040528281529250828483016020018610156112e957600080fd5b8260208601602083013760006020848301015250505092915050565b600060208284031215611316578081fd5b6106fd8383611270565b60008060408385031215611332578081fd5b61133c8484611270565b915061134b8460208501611270565b90509250929050565b600080600060608486031215611368578081fd5b8335611373816116b7565b92506020840135611383816116b7565b929592945050506040919091013590565b600080604083850312156113a6578182fd5b6113b08484611270565b946020939093013593505050565b600080604083850312156113d0578182fd5b823567ffffffffffffffff808211156113e7578384fd5b6113f386838701611287565b93506020850135915080821115611408578283fd5b5061141585828601611287565b9150509250929050565b600060208284031215611430578081fd5b5035919050565b60008060006060848603121561144b578283fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156114a35783516001600160a01b03168352928401929184019160010161147e565b50909695505050505050565b901515815260200190565b6000602080835283518082850152825b818110156114e6578581018301518582016040015282016114ca565b818111156114f75783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b90815260200190565b60ff91909116815260200190565b6001600160a01b0381168114610e8557600080fdfe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122062c6a825f183694744a883ec3ded696f72629dec251ace58ed4c78a2963552ed64736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c80634cd88b76116100a257806395d89b411161007157806395d89b4114610227578063981b24d01461022f578063a457c2d714610242578063a9059cbb14610255578063dd62ed3e1461026857610116565b80634cd88b76146101d95780634ee2cd7e146101ee578063520fdd221461020157806370a082311461021457610116565b806323b872dd116100e957806323b872dd14610176578063308feec314610189578063313ce5671461019157806331801925146101a657806339509351146101c657610116565b806306fdde031461011b578063095ea7b31461013957806318160ddd146101595780631aab9a9f1461016e575b600080fd5b61012361027b565b60405161013091906114ba565b60405180910390f35b61014c610147366004611394565b610312565b60405161013091906114af565b610161610330565b60405161013091906116a0565b610161610336565b61014c610184366004611354565b61033c565b6101616103c9565b6101996103cf565b60405161013091906116a9565b6101b96101b4366004611437565b6103d8565b6040516101309190611462565b61014c6101d4366004611394565b6105ef565b6101ec6101e73660046113be565b610643565b005b6101616101fc366004611394565b6106db565b6101b961020f36600461141f565b610704565b610161610222366004611305565b6108b8565b6101236108d3565b61016161023d36600461141f565b610934565b61014c610250366004611394565b610941565b61014c610263366004611394565b6109af565b610161610276366004611320565b6109c3565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103075780601f106102dc57610100808354040283529160200191610307565b820191906000526020600020905b8154815290600101906020018083116102ea57829003601f168201915b505050505090505b90565b600061032661031f6109ee565b84846109f2565b5060015b92915050565b60675490565b609b5481565b6000610349848484610aa6565b6103bf846103556109ee565b6103ba856040518060600160405280602881526020016116f3602891396001600160a01b038a166000908152606660205260408120906103936109ee565b6001600160a01b03168152602081019190915260400160002054919063ffffffff610abc16565b6109f2565b5060019392505050565b60995490565b606a5460ff1690565b6099546060908083106103ed578390036103f5565b506001838303015b60608167ffffffffffffffff8111801561040e57600080fd5b50604051908082528060200260200182016040528015610438578160200160208202803683370190505b50905060005b8281101561049f5760998682018154811061045557fe5b9060005260206000200160009054906101000a90046001600160a01b031682828151811061047f57fe5b6001600160a01b039092166020928302919091019091015260010161043e565b506000805b82518110156105145760006104cc8483815181106104be57fe5b60200260200101518a6106db565b11156104dd5760019091019061050c565b60008382815181106104eb57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6001016104a4565b60608267ffffffffffffffff8111801561052d57600080fd5b50604051908082528060200260200182016040528015610557578160200160208202803683370190505b50905060009250600091505b83518210156105e35760006001600160a01b031684838151811061058357fe5b60200260200101516001600160a01b0316146105d8578382815181106105a557fe5b60200260200101518184815181106105b957fe5b6001600160a01b03909216602092830291909101909101526001909201915b600190910190610563565b98975050505050505050565b60006103266105fc6109ee565b846103ba856066600061060d6109ee565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff610ae816565b600054610100900460ff168061065c575061065c610b0d565b8061066a575060005460ff16155b61068f5760405162461bcd60e51b8152600401610686906115c9565b60405180910390fd5b600054610100900460ff161580156106ba576000805460ff1961ff0019909116610100171660011790555b6106c48383610b13565b80156106d6576000805461ff00191690555b505050565b6001600160a01b03821660009081526098602052604081206106fd9083610b93565b9392505050565b60606000806060609980548060200260200160405190810160405280929190818152602001828054801561076157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610743575b50505050509050600091505b80518210156107e057600061079582848151811061078757fe5b6020026020010151876106db565b11156107a6576001909201916107d5565b60008183815181106107b457fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b60019091019061076d565b60608367ffffffffffffffff811180156107f957600080fd5b50604051908082528060200260200182016040528015610823578160200160208202803683370190505b50905060009350600092505b81518310156108af5760006001600160a01b031682848151811061084f57fe5b60200260200101516001600160a01b0316146108a45781838151811061087157fe5b602002602001015181858151811061088557fe5b6001600160a01b03909216602092830291909101909101526001909301925b60019092019161082f565b95945050505050565b6001600160a01b031660009081526065602052604090205490565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103075780601f106102dc57610100808354040283529160200191610307565b600061032a609783610b93565b600061032661094e6109ee565b846103ba8560405180606001604052806025815260200161171b60259139606660006109786109ee565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff610abc16565b60006103266109bc6109ee565b8484610aa6565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b3390565b6001600160a01b038316610a185760405162461bcd60e51b81526004016106869061165c565b6001600160a01b038216610a3e5760405162461bcd60e51b815260040161068690611550565b6001600160a01b0380841660008181526066602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610a999085906116a0565b60405180910390a3505050565b610ab1838383610cbf565b6106d6838383610de0565b60008184841115610ae05760405162461bcd60e51b815260040161068691906114ba565b505050900390565b6000828201838110156106fd5760405162461bcd60e51b815260040161068690611592565b303b1590565b600054610100900460ff1680610b2c5750610b2c610b0d565b80610b3a575060005460ff16155b610b565760405162461bcd60e51b8152600401610686906115c9565b600054610100900460ff16158015610b81576000805460ff1961ff0019909116610100171660011790555b610b89610e05565b6106c48383610e88565b8154600090610ba45750600061032a565b825483906000198101908110610bb657fe5b60009182526020909120600290910201546001600160801b03168210610c0157825483906000198101908110610be857fe5b906000526020600020906002020160010154905061032a565b82600081548110610c0e57fe5b60009182526020909120600290910201546001600160801b0316821015610c375750600061032a565b8254600090600019015b81811115610c97576000600260018385010104905084868281548110610c6357fe5b60009182526020909120600290910201546001600160801b031611610c8a57809250610c91565b6001810391505b50610c41565b848281548110610ca357fe5b9060005260206000209060020201600101549250505092915050565b6001600160a01b038316610ce55760405162461bcd60e51b815260040161068690611617565b6001600160a01b038216610d0b5760405162461bcd60e51b81526004016106869061150d565b610d168383836106d6565b610d59816040518060600160405280602681526020016116cd602691396001600160a01b038616600090815260656020526040902054919063ffffffff610abc16565b6001600160a01b038085166000908152606560205260408082209390935590841681522054610d8e908263ffffffff610ae816565b6001600160a01b0380841660008181526065602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610a999085906116a0565b610deb838383610f41565b610df3611040565b610dfc83611054565b6106d682611054565b600054610100900460ff1680610e1e5750610e1e610b0d565b80610e2c575060005460ff16155b610e485760405162461bcd60e51b8152600401610686906115c9565b600054610100900460ff16158015610e73576000805460ff1961ff0019909116610100171660011790555b8015610e85576000805461ff00191690555b50565b600054610100900460ff1680610ea15750610ea1610b0d565b80610eaf575060005460ff16155b610ecb5760405162461bcd60e51b8152600401610686906115c9565b600054610100900460ff16158015610ef6576000805460ff1961ff0019909116610100171660011790555b8251610f099060689060208601906111d8565b508151610f1d9060699060208501906111d8565b50606a805460ff1916601217905580156106d6576000805461ff0019169055505050565b801580610f5f5750816001600160a01b0316836001600160a01b0316145b15610f69576106d6565b610f72826108b8565b158015610f8757506001600160a01b03821615155b1561101457609b54610fa090600163ffffffff610ae816565b609b55610fac82611079565b611014576099805460018082019092557f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d000180546001600160a01b0319166001600160a01b0385169081179091556000908152609a60205260409020805460ff191690911790555b61101d836108b8565b8114156106d657609b5461103890600163ffffffff61109716565b609b55505050565b611052609761104d610330565b6110d9565b565b6001600160a01b0381166000908152609860205260409020610e859061104d836108b8565b6001600160a01b03166000908152609a602052604090205460ff1690565b60006106fd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610abc565b8154158061111157508154829060001981019081106110f457fe5b60009182526020909120600290910201546001600160801b031642115b156111a757604080518082018252426001600160801b039081168252602080830185815286546001808201895560008981529384209551600290920290950180546fffffffffffffffffffffffffffffffff1916919094161783555191909201558354915160001992909201917f76735e462dae5480c552f970568dc60e35cc3c4c06eb818f77bbb357593bf7fa9190a26111d4565b8154600090839060001981019081106111bc57fe5b60009182526020909120600160029092020101829055505b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061121957805160ff1916838001178555611246565b82800160010185558215611246579182015b8281111561124657825182559160200191906001019061122b565b50611252929150611256565b5090565b61030f91905b80821115611252576000815560010161125c565b80356001600160a01b038116811461032a57600080fd5b600082601f830112611297578081fd5b813567ffffffffffffffff808211156112ae578283fd5b604051601f8301601f1916810160200182811182821017156112ce578485fd5b6040528281529250828483016020018610156112e957600080fd5b8260208601602083013760006020848301015250505092915050565b600060208284031215611316578081fd5b6106fd8383611270565b60008060408385031215611332578081fd5b61133c8484611270565b915061134b8460208501611270565b90509250929050565b600080600060608486031215611368578081fd5b8335611373816116b7565b92506020840135611383816116b7565b929592945050506040919091013590565b600080604083850312156113a6578182fd5b6113b08484611270565b946020939093013593505050565b600080604083850312156113d0578182fd5b823567ffffffffffffffff808211156113e7578384fd5b6113f386838701611287565b93506020850135915080821115611408578283fd5b5061141585828601611287565b9150509250929050565b600060208284031215611430578081fd5b5035919050565b60008060006060848603121561144b578283fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b818110156114a35783516001600160a01b03168352928401929184019160010161147e565b50909695505050505050565b901515815260200190565b6000602080835283518082850152825b818110156114e6578581018301518582016040015282016114ca565b818111156114f75783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b90815260200190565b60ff91909116815260200190565b6001600160a01b0381168114610e8557600080fdfe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122062c6a825f183694744a883ec3ded696f72629dec251ace58ed4c78a2963552ed64736f6c634300060b0033",
  "immutableReferences": {},
  "sourceMap": "227:5540:60:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "227:5540:60:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2469:81:111;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4505:166;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3512:98::-;;;:::i;:::-;;;;;;;:::i;460:26:61:-;;;:::i;5131:317:111:-;;;;;;:::i;:::-;;:::i;2577:97:60:-;;;:::i;3371:81:111:-;;;:::i;:::-;;;;;;;:::i;1500:1071:60:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5843:215:111:-;;;;;;:::i;:::-;;:::i;425:124:60:-;;;;;;:::i;:::-;;:::i;:::-;;2877:158;;;;;;:::i;:::-;;:::i;770:724::-;;;;;;:::i;:::-;;:::i;3668:117:111:-;;;;;;:::i;:::-;;:::i;2663:85::-;;;:::i;3203:139:60:-;;;;;;:::i;:::-;;:::i;6545:266:111:-;;;;;;:::i;:::-;;:::i;3988:172::-;;;;;;:::i;:::-;;:::i;4218:149::-;;;;;;:::i;:::-;;:::i;2469:81::-;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;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;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;3668:117:111:-;-1:-1:-1;;;;;3760:18:111;3734:7;3760:18;;;:9;:18;;;;;;;3668:117::o;2663:85::-;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;4218:149::-;-1:-1:-1;;;;;4333:18:111;;;4307:7;4333:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4218:149::o;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;834:176::-;892:7;923:5;;;946:6;;;;938:46;;;;-1:-1:-1;;;938:46:110;;;;;;;:::i;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;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;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;1274:134:110:-;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;:3;:43::i;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;2004:550:58;1666:894;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;5:130;72:20;;-1:-1;;;;;13175:54;;14003:35;;13993:2;;14052:1;;14042:12;143:442;;245:3;238:4;230:6;226:17;222:27;212:2;;-1:-1;;253:12;212:2;300:6;287:20;11833:18;;11825:6;11822:30;11819:2;;;-1:-1;;11855:12;11819:2;11488;11482:9;11928;11909:17;;-1:-1;;11905:33;11514:17;;11996:4;11514:17;11574:34;;;11610:22;;;11571:62;11568:2;;;-1:-1;;11636:12;11568:2;11488;11655:22;393:21;;;313:74;-1:-1;313:74;493:16;;;11996:4;493:16;490:25;-1:-1;487:2;;;528:1;;518:12;487:2;13490:6;11996:4;435:6;431:17;11996:4;469:5;465:16;13467:30;13546:1;11996:4;13537:6;469:5;13528:16;;13521:27;;;;205:380;;;;:::o;730:241::-;;834:2;822:9;813:7;809:23;805:32;802:2;;;-1:-1;;840:12;802:2;902:53;947:7;923:22;902:53;:::i;978:366::-;;;1099:2;1087:9;1078:7;1074:23;1070:32;1067:2;;;-1:-1;;1105:12;1067:2;1167:53;1212:7;1188:22;1167:53;:::i;:::-;1157:63;;1275:53;1320:7;1257:2;1300:9;1296:22;1275:53;:::i;:::-;1265:63;;1061:283;;;;;:::o;1351:491::-;;;;1489:2;1477:9;1468:7;1464:23;1460:32;1457:2;;;-1:-1;;1495:12;1457:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;1547:63;-1:-1;1647:2;1686:22;;72:20;97:33;72:20;97:33;:::i;:::-;1451:391;;1655:63;;-1:-1;;;1755:2;1794:22;;;;660:20;;1451:391::o;1849:366::-;;;1970:2;1958:9;1949:7;1945:23;1941:32;1938:2;;;-1:-1;;1976:12;1938:2;2038:53;2083:7;2059:22;2038:53;:::i;:::-;2028:63;2128:2;2167:22;;;;660:20;;-1:-1;;;1932:283::o;2222:578::-;;;2363:2;2351:9;2342:7;2338:23;2334:32;2331:2;;;-1:-1;;2369:12;2331:2;2427:17;2414:31;2465:18;;2457:6;2454:30;2451:2;;;-1:-1;;2487:12;2451:2;2517:63;2572:7;2563:6;2552:9;2548:22;2517:63;:::i;:::-;2507:73;;2645:2;2634:9;2630:18;2617:32;2603:46;;2465:18;2661:6;2658:30;2655:2;;;-1:-1;;2691:12;2655:2;;2721:63;2776:7;2767:6;2756:9;2752:22;2721:63;:::i;:::-;2711:73;;;2325:475;;;;;:::o;2807:241::-;;2911:2;2899:9;2890:7;2886:23;2882:32;2879:2;;;-1:-1;;2917:12;2879:2;-1:-1;660:20;;2873:175;-1:-1;2873:175::o;3055:491::-;;;;3193:2;3181:9;3172:7;3168:23;3164:32;3161:2;;;-1:-1;;3199:12;3161:2;-1:-1;;660:20;;;3351:2;3390:22;;660:20;;-1:-1;3459:2;3498:22;;;660:20;;3155:391;-1:-1;3155:391::o;7527:370::-;7704:2;7718:47;;;12279:12;;7689:18;;;12683:19;;;7527:370;;7704:2;12133:14;;;;12723;;;;7527:370;4284:260;4309:6;4306:1;4303:13;4284:260;;;4370:13;;-1:-1;;;;;13175:54;3796:37;;12538:14;;;;3707;;;;13186:42;4324:9;4284:260;;;-1:-1;7771:116;;7675:222;-1:-1;;;;;;7675:222::o;7904:210::-;13087:13;;13080:21;4639:34;;8025:2;8010:18;;7996:118::o;8121:310::-;;8268:2;;8289:17;8282:47;4830:5;12279:12;12695:6;8268:2;8257:9;8253:18;12683:19;-1:-1;13635:101;13649:6;13646:1;13643:13;13635:101;;;13716:11;;;;;13710:18;13697:11;;;12723:14;13697:11;13690:39;13664:10;;13635:101;;;13751:6;13748:1;13745:13;13742:2;;;-1:-1;12723:14;13807:6;8257:9;13798:16;;13791:27;13742:2;-1:-1;11928:9;13907:14;-1:-1;;13903:28;4988:39;;;;12723:14;4988:39;;8239:192;-1:-1;;;8239:192::o;8438:416::-;8638:2;8652:47;;;5264:2;8623:18;;;12683:19;5300:34;12723:14;;;5280:55;-1:-1;;;5355:12;;;5348:27;5394:12;;;8609:245::o;8861:416::-;9061:2;9075:47;;;5645:2;9046:18;;;12683:19;5681:34;12723:14;;;5661:55;-1:-1;;;5736:12;;;5729:26;5774:12;;;9032:245::o;9284:416::-;9484:2;9498:47;;;6025:2;9469:18;;;12683:19;6061:29;12723:14;;;6041:50;6110:12;;;9455:245::o;9707:416::-;9907:2;9921:47;;;6361:2;9892:18;;;12683:19;6397:34;12723:14;;;6377:55;-1:-1;;;6452:12;;;6445:38;6502:12;;;9878:245::o;10130:416::-;10330:2;10344:47;;;6753:2;10315:18;;;12683:19;6789:34;12723:14;;;6769:55;-1:-1;;;6844:12;;;6837:29;6885:12;;;10301:245::o;10553:416::-;10753:2;10767:47;;;7136:2;10738:18;;;12683:19;7172:34;12723:14;;;7152:55;-1:-1;;;7227:12;;;7220:28;7267:12;;;10724:245::o;10976:222::-;7364:37;;;11103:2;11088:18;;11074:124::o;11205:214::-;13391:4;13380:16;;;;7480:35;;11328:2;11313:18;;11299:120::o;13944:117::-;-1:-1;;;;;13175:54;;14003:35;;13993:2;;14052:1;;14042:12",
  "source": "// \"SPDX-License-Identifier: Apache-2.0\"\npragma solidity 0.6.11;\npragma experimental ABIEncoderV2;\n\nimport \"@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/ERC20.sol\";\n\nimport \"./CheckpointedTokenStorage.sol\";\n\n\ncontract CheckpointedToken is ERC20UpgradeSafe, CheckpointedTokenStorage {\n\n    /**\n     * @notice Initialize a new instance storage\n     * @dev \"constructor\" to be called on deployment\n     */\n    function initialize(string memory name, string memory symbol) public initializer {\n        __ERC20_init(name, symbol);\n    }\n\n    /**\n     * @notice returns an array of holders with non zero balance at a given checkpoint\n     * @param checkpointId Checkpoint id at which holder list is to be populated\n     * @return list of holders\n     */\n    function getHoldersAt(uint256 checkpointId) public view returns(address[] memory) {\n        uint256 count;\n        uint256 i;\n        address[] memory activeHolders = holders;\n        for (i = 0; i < activeHolders.length; i++) {\n            if (balanceOfAt(activeHolders[i], checkpointId) > 0) {\n                count++;\n            } else {\n                activeHolders[i] = address(0);\n            }\n        }\n        address[] memory _holders = new address[](count);\n        count = 0;\n        for (i = 0; i < activeHolders.length; i++) {\n            if (activeHolders[i] != address(0)) {\n                _holders[count] = activeHolders[i];\n                count++;\n            }\n        }\n        return _holders;\n    }\n\n    function getHolderSubsetAt(\n        uint256 checkpointId,\n        uint256 start,\n        uint256 end\n    )\n        public\n        view\n        returns(address[] memory)\n    {\n        uint256 size = holders.length;\n        if (end >= size) {\n            size = size - start;\n        } else {\n            size = end - start + 1;\n        }\n        address[] memory holderSubset = new address[](size);\n        for(uint256 j; j < size; j++)\n            holderSubset[j] = holders[j + start];\n\n        uint256 count;\n        uint256 i;\n        for (i = 0; i < holderSubset.length; i++) {\n            if (balanceOfAt(holderSubset[i], checkpointId) > 0) {\n                count++;\n            } else {\n                holderSubset[i] = address(0);\n            }\n        }\n        address[] memory _holders = new address[](count);\n        count = 0;\n        for (i = 0; i < holderSubset.length; i++) {\n            if (holderSubset[i] != address(0)) {\n                _holders[count] = holderSubset[i];\n                count++;\n            }\n        }\n        return _holders;\n    }\n\n    function getNumberOfHolders() public view returns(uint256) {\n        return holders.length;\n    }\n\n    /**\n     * @notice Queries the balances of a holder at a specific timestamp\n     * @param holder Holder to query balance for\n     * @param timestamp Timestamp of the balance checkpoint\n     */\n    function balanceOfAt(address holder, uint256 timestamp) public view returns(uint256) {\n        return getValueAt(checkpointBalances[holder], timestamp);\n    }\n\n    /**\n     * @notice Queries totalSupply at a specific timestamp\n     * @param timestamp Timestamp of the totalSupply checkpoint\n     * @return uint256\n     */\n    function totalSupplyAt(uint256 timestamp) public view returns(uint256) {\n        return getValueAt(checkpointTotalSupply, timestamp);\n    }\n\n    function _isExistingHolder(address holder) internal view returns(bool) {\n        return holderExists[holder];\n    }\n\n    function _adjustHolderCount(address from, address to, uint256 value) internal {\n        if ((value == 0) || (from == to)) {\n            return;\n        }\n        // Check whether receiver is a new token holder\n        if ((balanceOf(to) == 0) && (to != address(0))) {\n            holderCount = holderCount.add(1);\n            if (!_isExistingHolder(to)) {\n                holders.push(to);\n                holderExists[to] = true;\n            }\n        }\n        // Check whether sender is moving all of their tokens\n        if (value == balanceOf(from)) {\n            holderCount = holderCount.sub(1);\n        }\n    }\n\n    /**\n     * @notice Internal - adjusts totalSupply at checkpoint before a token transfer\n     */\n    function _adjustTotalSupplyCheckpoints() internal {\n        updateValueAtNow(checkpointTotalSupply, totalSupply());\n    }\n\n    /**\n     * @notice Internal - adjusts token holder balance at checkpoint before a token transfer\n     * @param holder address of the token holder affected\n     */\n    function _adjustBalanceCheckpoints(address holder) internal {\n        updateValueAtNow(checkpointBalances[holder], balanceOf(holder));\n    }\n\n    /**\n     * @notice Updates internal variables when performing a transfer\n     * @param from sender of transfer\n     * @param to receiver of transfer\n     * @param value value of transfer\n     */\n    function _updateTransfer(address from, address to, uint256 value) internal {\n        _adjustHolderCount(from, to, value);\n        _adjustTotalSupplyCheckpoints();\n        _adjustBalanceCheckpoints(from);\n        _adjustBalanceCheckpoints(to);\n    }\n\n    function _mint(\n        address tokenHolder,\n        uint256 value\n    )\n        internal\n        override\n    {\n        super._mint(tokenHolder, value);\n        _updateTransfer(address(0), tokenHolder, value);\n    }\n\n    function _burn(\n        address tokenHolder,\n        uint256 value\n    )\n        internal\n        override\n    {\n        super._burn(tokenHolder, value);\n        _updateTransfer(tokenHolder, address(0), value);\n    }\n\n    function _transfer(\n        address from,\n        address to,\n        uint256 value\n    )\n        internal\n        virtual\n        override\n    {\n        super._transfer(from, to, value);\n        _updateTransfer(from, to, value);\n    }\n}\n",
  "sourcePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/CheckpointedToken/CheckpointedToken.sol",
  "ast": {
    "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/CheckpointedToken/CheckpointedToken.sol",
    "exportedSymbols": {
      "CheckpointedToken": [
        20550
      ]
    },
    "id": 20551,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 19994,
        "literals": [
          "solidity",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:23:60"
      },
      {
        "id": 19995,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "65:33:60"
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/ERC20.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/ERC20.sol",
        "id": 19996,
        "nodeType": "ImportDirective",
        "scope": 20551,
        "sourceUnit": 38158,
        "src": "100:82:60",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/CheckpointedToken/CheckpointedTokenStorage.sol",
        "file": "./CheckpointedTokenStorage.sol",
        "id": 19997,
        "nodeType": "ImportDirective",
        "scope": 20551,
        "sourceUnit": 20579,
        "src": "184:40:60",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 19998,
              "name": "ERC20UpgradeSafe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 38157,
              "src": "257:16:60",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20UpgradeSafe_$38157",
                "typeString": "contract ERC20UpgradeSafe"
              }
            },
            "id": 19999,
            "nodeType": "InheritanceSpecifier",
            "src": "257:16:60"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 20000,
              "name": "CheckpointedTokenStorage",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20578,
              "src": "275:24:60",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CheckpointedTokenStorage_$20578",
                "typeString": "contract CheckpointedTokenStorage"
              }
            },
            "id": 20001,
            "nodeType": "InheritanceSpecifier",
            "src": "275:24:60"
          }
        ],
        "contractDependencies": [
          19984,
          19992,
          20578,
          37222,
          37297,
          38157,
          38235
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 20550,
        "linearizedBaseContracts": [
          20550,
          20578,
          19984,
          19992,
          38157,
          38235,
          37222,
          37297
        ],
        "name": "CheckpointedToken",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 20016,
              "nodeType": "Block",
              "src": "506:43:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20012,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20004,
                        "src": "529:4:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20013,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20006,
                        "src": "535:6:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 20011,
                      "name": "__ERC20_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 37680,
                      "src": "516:12:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory,string memory)"
                      }
                    },
                    "id": 20014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "516:26:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20015,
                  "nodeType": "ExpressionStatement",
                  "src": "516:26:60"
                }
              ]
            },
            "documentation": {
              "id": 20002,
              "nodeType": "StructuredDocumentation",
              "src": "307:113:60",
              "text": " @notice Initialize a new instance storage\n @dev \"constructor\" to be called on deployment"
            },
            "functionSelector": "4cd88b76",
            "id": 20017,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 20009,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20008,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 37270,
                  "src": "494:11:60",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "494:11:60"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20007,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20004,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20017,
                  "src": "445:18:60",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 20003,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "445:6:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20006,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20017,
                  "src": "465:20:60",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 20005,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "465:6:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "444:42:60"
            },
            "returnParameters": {
              "id": 20010,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "506:0:60"
            },
            "scope": 20550,
            "src": "425:124:60",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20126,
              "nodeType": "Block",
              "src": "852:642:60",
              "statements": [
                {
                  "assignments": [
                    20027
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20027,
                      "mutability": "mutable",
                      "name": "count",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20126,
                      "src": "862:13:60",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 20026,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "862:7:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20028,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "862:13:60"
                },
                {
                  "assignments": [
                    20030
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20030,
                      "mutability": "mutable",
                      "name": "i",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20126,
                      "src": "885:9:60",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 20029,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "885:7:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20031,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "885:9:60"
                },
                {
                  "assignments": [
                    20036
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20036,
                      "mutability": "mutable",
                      "name": "activeHolders",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20126,
                      "src": "904:30:60",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 20034,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "904:7:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 20035,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "904:9:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20038,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 20037,
                    "name": "holders",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 20567,
                    "src": "937:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "904:40:60"
                },
                {
                  "body": {
                    "id": 20073,
                    "nodeType": "Block",
                    "src": "997:185:60",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 20057,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 20051,
                                  "name": "activeHolders",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20036,
                                  "src": "1027:13:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 20053,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 20052,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20030,
                                  "src": "1041:1:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1027:16:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 20054,
                                "name": "checkpointId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20020,
                                "src": "1045:12:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 20050,
                              "name": "balanceOfAt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20316,
                              "src": "1015:11:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (address,uint256) view returns (uint256)"
                              }
                            },
                            "id": 20055,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1015:43:60",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 20056,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1061:1:60",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1015:47:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 20071,
                          "nodeType": "Block",
                          "src": "1110:62:60",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20069,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20062,
                                    "name": "activeHolders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20036,
                                    "src": "1128:13:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 20064,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 20063,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20030,
                                    "src": "1142:1:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "1128:16:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 20067,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1155:1:60",
                                      "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": 20066,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1147:7:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 20065,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1147:7:60",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 20068,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1147:10:60",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "src": "1128:29:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 20070,
                              "nodeType": "ExpressionStatement",
                              "src": "1128:29:60"
                            }
                          ]
                        },
                        "id": 20072,
                        "nodeType": "IfStatement",
                        "src": "1011:161:60",
                        "trueBody": {
                          "id": 20061,
                          "nodeType": "Block",
                          "src": "1064:40:60",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20059,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "1082:7:60",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 20058,
                                  "name": "count",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20027,
                                  "src": "1082:5:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20060,
                              "nodeType": "ExpressionStatement",
                              "src": "1082:7:60"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20046,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20043,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20030,
                      "src": "966:1:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20044,
                        "name": "activeHolders",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20036,
                        "src": "970:13:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 20045,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "970:20:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "966:24:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20074,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20041,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 20039,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20030,
                        "src": "959:1:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 20040,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "963:1:60",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "959:5:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 20042,
                    "nodeType": "ExpressionStatement",
                    "src": "959:5:60"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20048,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "992:3:60",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 20047,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20030,
                        "src": "992:1:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 20049,
                    "nodeType": "ExpressionStatement",
                    "src": "992:3:60"
                  },
                  "nodeType": "ForStatement",
                  "src": "954:228:60"
                },
                {
                  "assignments": [
                    20079
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20079,
                      "mutability": "mutable",
                      "name": "_holders",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20126,
                      "src": "1191:25:60",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 20077,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1191:7:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 20078,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "1191:9:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20085,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20083,
                        "name": "count",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20027,
                        "src": "1233:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20082,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "1219:13:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 20080,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1223:7:60",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 20081,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "1223:9:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 20084,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1219:20:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1191:48:60"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20088,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20086,
                      "name": "count",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20027,
                      "src": "1249:5:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 20087,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1257:1:60",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1249:9:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20089,
                  "nodeType": "ExpressionStatement",
                  "src": "1249:9:60"
                },
                {
                  "body": {
                    "id": 20122,
                    "nodeType": "Block",
                    "src": "1311:152:60",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 20108,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 20101,
                              "name": "activeHolders",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20036,
                              "src": "1329:13:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            "id": 20103,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 20102,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20030,
                              "src": "1343:1:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1329:16:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 20106,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1357:1:60",
                                "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": 20105,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1349:7:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 20104,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1349:7:60",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 20107,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1349:10:60",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "1329:30:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 20121,
                        "nodeType": "IfStatement",
                        "src": "1325:128:60",
                        "trueBody": {
                          "id": 20120,
                          "nodeType": "Block",
                          "src": "1361:92:60",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20115,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20109,
                                    "name": "_holders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20079,
                                    "src": "1379:8:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 20111,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 20110,
                                    "name": "count",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20027,
                                    "src": "1388:5:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "1379:15:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20112,
                                    "name": "activeHolders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20036,
                                    "src": "1397:13:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 20114,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 20113,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20030,
                                    "src": "1411:1:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "1397:16:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "1379:34:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 20116,
                              "nodeType": "ExpressionStatement",
                              "src": "1379:34:60"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20118,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "1431:7:60",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 20117,
                                  "name": "count",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20027,
                                  "src": "1431:5:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20119,
                              "nodeType": "ExpressionStatement",
                              "src": "1431:7:60"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20097,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20094,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20030,
                      "src": "1280:1:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20095,
                        "name": "activeHolders",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20036,
                        "src": "1284:13:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 20096,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1284:20:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1280:24:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20123,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20092,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 20090,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20030,
                        "src": "1273:1:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 20091,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1277:1:60",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "1273:5:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 20093,
                    "nodeType": "ExpressionStatement",
                    "src": "1273:5:60"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20099,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "1306:3:60",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 20098,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20030,
                        "src": "1306:1:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 20100,
                    "nodeType": "ExpressionStatement",
                    "src": "1306:3:60"
                  },
                  "nodeType": "ForStatement",
                  "src": "1268:195:60"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20124,
                    "name": "_holders",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 20079,
                    "src": "1479:8:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "functionReturnParameters": 20025,
                  "id": 20125,
                  "nodeType": "Return",
                  "src": "1472:15:60"
                }
              ]
            },
            "documentation": {
              "id": 20018,
              "nodeType": "StructuredDocumentation",
              "src": "555:210:60",
              "text": " @notice returns an array of holders with non zero balance at a given checkpoint\n @param checkpointId Checkpoint id at which holder list is to be populated\n @return list of holders"
            },
            "functionSelector": "520fdd22",
            "id": 20127,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getHoldersAt",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20020,
                  "mutability": "mutable",
                  "name": "checkpointId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20127,
                  "src": "792:20:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20019,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "792:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "791:22:60"
            },
            "returnParameters": {
              "id": 20025,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20024,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20127,
                  "src": "834:16:60",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 20022,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "834:7:60",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 20023,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "834:9:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "833:18:60"
            },
            "scope": 20550,
            "src": "770:724:60",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20288,
              "nodeType": "Block",
              "src": "1673:898:60",
              "statements": [
                {
                  "assignments": [
                    20140
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20140,
                      "mutability": "mutable",
                      "name": "size",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20288,
                      "src": "1683:12:60",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 20139,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1683:7:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20143,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 20141,
                      "name": "holders",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20567,
                      "src": "1698:7:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                        "typeString": "address[] storage ref"
                      }
                    },
                    "id": 20142,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "1698:14:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1683:29:60"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20146,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20144,
                      "name": "end",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20133,
                      "src": "1726:3:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 20145,
                      "name": "size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20140,
                      "src": "1733:4:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1726:11:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 20162,
                    "nodeType": "Block",
                    "src": "1789:47:60",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20160,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 20154,
                            "name": "size",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20140,
                            "src": "1803:4:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 20159,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 20157,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 20155,
                                "name": "end",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20133,
                                "src": "1810:3:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 20156,
                                "name": "start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20131,
                                "src": "1816:5:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1810:11:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 20158,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1824:1:60",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "1810:15:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1803:22:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20161,
                        "nodeType": "ExpressionStatement",
                        "src": "1803:22:60"
                      }
                    ]
                  },
                  "id": 20163,
                  "nodeType": "IfStatement",
                  "src": "1722:114:60",
                  "trueBody": {
                    "id": 20153,
                    "nodeType": "Block",
                    "src": "1739:44:60",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20151,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 20147,
                            "name": "size",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20140,
                            "src": "1753:4:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 20150,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 20148,
                              "name": "size",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20140,
                              "src": "1760:4:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 20149,
                              "name": "start",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20131,
                              "src": "1767:5:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1760:12:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1753:19:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20152,
                        "nodeType": "ExpressionStatement",
                        "src": "1753:19:60"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    20168
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20168,
                      "mutability": "mutable",
                      "name": "holderSubset",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20288,
                      "src": "1845:29:60",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 20166,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1845:7:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 20167,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "1845:9:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20174,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20172,
                        "name": "size",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20140,
                        "src": "1891:4:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20171,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "1877:13:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 20169,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1881:7:60",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 20170,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "1881:9:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 20173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1877:19:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1845:51:60"
                },
                {
                  "body": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20192,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 20184,
                          "name": "holderSubset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20168,
                          "src": "1948:12:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "id": 20186,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 20185,
                          "name": "j",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20176,
                          "src": "1961:1:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "nodeType": "IndexAccess",
                        "src": "1948:15:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 20187,
                          "name": "holders",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20567,
                          "src": "1966:7:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage",
                            "typeString": "address[] storage ref"
                          }
                        },
                        "id": 20191,
                        "indexExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 20190,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 20188,
                            "name": "j",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20176,
                            "src": "1974:1:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 20189,
                            "name": "start",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20131,
                            "src": "1978:5:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1974:9:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1966:18:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "1948:36:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 20193,
                    "nodeType": "ExpressionStatement",
                    "src": "1948:36:60"
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20180,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20178,
                      "name": "j",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20176,
                      "src": "1921:1:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 20179,
                      "name": "size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20140,
                      "src": "1925:4:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1921:8:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20194,
                  "initializationExpression": {
                    "assignments": [
                      20176
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 20176,
                        "mutability": "mutable",
                        "name": "j",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 20194,
                        "src": "1910:9:60",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 20175,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1910:7:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 20177,
                    "initialValue": null,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1910:9:60"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20182,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "1931:3:60",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 20181,
                        "name": "j",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20176,
                        "src": "1931:1:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 20183,
                    "nodeType": "ExpressionStatement",
                    "src": "1931:3:60"
                  },
                  "nodeType": "ForStatement",
                  "src": "1906:78:60"
                },
                {
                  "assignments": [
                    20196
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20196,
                      "mutability": "mutable",
                      "name": "count",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20288,
                      "src": "1995:13:60",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 20195,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1995:7:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20197,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1995:13:60"
                },
                {
                  "assignments": [
                    20199
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20199,
                      "mutability": "mutable",
                      "name": "i",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20288,
                      "src": "2018:9:60",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 20198,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2018:7:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20200,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2018:9:60"
                },
                {
                  "body": {
                    "id": 20235,
                    "nodeType": "Block",
                    "src": "2079:183:60",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 20219,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 20213,
                                  "name": "holderSubset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20168,
                                  "src": "2109:12:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 20215,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 20214,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20199,
                                  "src": "2122:1:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "2109:15:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 20216,
                                "name": "checkpointId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20129,
                                "src": "2126:12:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 20212,
                              "name": "balanceOfAt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20316,
                              "src": "2097:11:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (address,uint256) view returns (uint256)"
                              }
                            },
                            "id": 20217,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2097:42:60",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 20218,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2142:1:60",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2097:46:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 20233,
                          "nodeType": "Block",
                          "src": "2191:61:60",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20231,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20224,
                                    "name": "holderSubset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20168,
                                    "src": "2209:12:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 20226,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 20225,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20199,
                                    "src": "2222:1:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "2209:15:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 20229,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2235:1:60",
                                      "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": 20228,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2227:7:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 20227,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2227:7:60",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 20230,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2227:10:60",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "src": "2209:28:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 20232,
                              "nodeType": "ExpressionStatement",
                              "src": "2209:28:60"
                            }
                          ]
                        },
                        "id": 20234,
                        "nodeType": "IfStatement",
                        "src": "2093:159:60",
                        "trueBody": {
                          "id": 20223,
                          "nodeType": "Block",
                          "src": "2145:40:60",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20221,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "2163:7:60",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 20220,
                                  "name": "count",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20196,
                                  "src": "2163:5:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20222,
                              "nodeType": "ExpressionStatement",
                              "src": "2163:7:60"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20208,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20205,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20199,
                      "src": "2049:1:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20206,
                        "name": "holderSubset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20168,
                        "src": "2053:12:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 20207,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2053:19:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2049:23:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20236,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20203,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 20201,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20199,
                        "src": "2042:1:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 20202,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2046:1:60",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2042:5:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 20204,
                    "nodeType": "ExpressionStatement",
                    "src": "2042:5:60"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20210,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2074:3:60",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 20209,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20199,
                        "src": "2074:1:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 20211,
                    "nodeType": "ExpressionStatement",
                    "src": "2074:3:60"
                  },
                  "nodeType": "ForStatement",
                  "src": "2037:225:60"
                },
                {
                  "assignments": [
                    20241
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20241,
                      "mutability": "mutable",
                      "name": "_holders",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20288,
                      "src": "2271:25:60",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 20239,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2271:7:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 20240,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2271:9:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20247,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20245,
                        "name": "count",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20196,
                        "src": "2313:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20244,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2299:13:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 20242,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2303:7:60",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 20243,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2303:9:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 20246,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2299:20:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2271:48:60"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20250,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20248,
                      "name": "count",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20196,
                      "src": "2329:5:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 20249,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2337:1:60",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2329:9:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20251,
                  "nodeType": "ExpressionStatement",
                  "src": "2329:9:60"
                },
                {
                  "body": {
                    "id": 20284,
                    "nodeType": "Block",
                    "src": "2390:150:60",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 20270,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 20263,
                              "name": "holderSubset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20168,
                              "src": "2408:12:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            "id": 20265,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 20264,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20199,
                              "src": "2421:1:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2408:15:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 20268,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2435:1:60",
                                "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": 20267,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2427:7:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 20266,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2427:7:60",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 20269,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2427:10:60",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "2408:29:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 20283,
                        "nodeType": "IfStatement",
                        "src": "2404:126:60",
                        "trueBody": {
                          "id": 20282,
                          "nodeType": "Block",
                          "src": "2439:91:60",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20277,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20271,
                                    "name": "_holders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20241,
                                    "src": "2457:8:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 20273,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 20272,
                                    "name": "count",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20196,
                                    "src": "2466:5:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "2457:15:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20274,
                                    "name": "holderSubset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20168,
                                    "src": "2475:12:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 20276,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 20275,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20199,
                                    "src": "2488:1:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2475:15:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "2457:33:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 20278,
                              "nodeType": "ExpressionStatement",
                              "src": "2457:33:60"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20280,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "2508:7:60",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 20279,
                                  "name": "count",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20196,
                                  "src": "2508:5:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20281,
                              "nodeType": "ExpressionStatement",
                              "src": "2508:7:60"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20259,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20256,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20199,
                      "src": "2360:1:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20257,
                        "name": "holderSubset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20168,
                        "src": "2364:12:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 20258,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2364:19:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2360:23:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20285,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20254,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 20252,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20199,
                        "src": "2353:1:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 20253,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2357:1:60",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2353:5:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 20255,
                    "nodeType": "ExpressionStatement",
                    "src": "2353:5:60"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20261,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2385:3:60",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 20260,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20199,
                        "src": "2385:1:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 20262,
                    "nodeType": "ExpressionStatement",
                    "src": "2385:3:60"
                  },
                  "nodeType": "ForStatement",
                  "src": "2348:192:60"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20286,
                    "name": "_holders",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 20241,
                    "src": "2556:8:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "functionReturnParameters": 20138,
                  "id": 20287,
                  "nodeType": "Return",
                  "src": "2549:15:60"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "31801925",
            "id": 20289,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getHolderSubsetAt",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20134,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20129,
                  "mutability": "mutable",
                  "name": "checkpointId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20289,
                  "src": "1536:20:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20128,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1536:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20131,
                  "mutability": "mutable",
                  "name": "start",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20289,
                  "src": "1566:13:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20130,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1566:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20133,
                  "mutability": "mutable",
                  "name": "end",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20289,
                  "src": "1589:11:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20132,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1589:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1526:80:60"
            },
            "returnParameters": {
              "id": 20138,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20137,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20289,
                  "src": "1651:16:60",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 20135,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1651:7:60",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 20136,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1651:9:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1650:18:60"
            },
            "scope": 20550,
            "src": "1500:1071:60",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20297,
              "nodeType": "Block",
              "src": "2636:38:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 20294,
                      "name": "holders",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20567,
                      "src": "2653:7:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                        "typeString": "address[] storage ref"
                      }
                    },
                    "id": 20295,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "2653:14:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 20293,
                  "id": 20296,
                  "nodeType": "Return",
                  "src": "2646:21:60"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "308feec3",
            "id": 20298,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getNumberOfHolders",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20290,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2604:2:60"
            },
            "returnParameters": {
              "id": 20293,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20292,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20298,
                  "src": "2627:7:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20291,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2627:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2626:9:60"
            },
            "scope": 20550,
            "src": "2577:97:60",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20315,
              "nodeType": "Block",
              "src": "2962:73:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 20309,
                          "name": "checkpointBalances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20564,
                          "src": "2990:18:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct CheckpointStorage.Checkpoint storage ref[] storage ref)"
                          }
                        },
                        "id": 20311,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 20310,
                          "name": "holder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20301,
                          "src": "3009:6:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2990:26:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage",
                          "typeString": "struct CheckpointStorage.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20312,
                        "name": "timestamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20303,
                        "src": "3018:9:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage",
                          "typeString": "struct CheckpointStorage.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20308,
                      "name": "getValueAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19919,
                      "src": "2979:10:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage_ptr_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (struct CheckpointStorage.Checkpoint storage ref[] storage pointer,uint256) view returns (uint256)"
                      }
                    },
                    "id": 20313,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2979:49:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 20307,
                  "id": 20314,
                  "nodeType": "Return",
                  "src": "2972:56:60"
                }
              ]
            },
            "documentation": {
              "id": 20299,
              "nodeType": "StructuredDocumentation",
              "src": "2680:192:60",
              "text": " @notice Queries the balances of a holder at a specific timestamp\n @param holder Holder to query balance for\n @param timestamp Timestamp of the balance checkpoint"
            },
            "functionSelector": "4ee2cd7e",
            "id": 20316,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOfAt",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20304,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20301,
                  "mutability": "mutable",
                  "name": "holder",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20316,
                  "src": "2898:14:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20300,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2898:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20303,
                  "mutability": "mutable",
                  "name": "timestamp",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20316,
                  "src": "2914:17:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20302,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2914:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2897:35:60"
            },
            "returnParameters": {
              "id": 20307,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20306,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20316,
                  "src": "2953:7:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20305,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2953:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2952:9:60"
            },
            "scope": 20550,
            "src": "2877:158:60",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20329,
              "nodeType": "Block",
              "src": "3274:68:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20325,
                        "name": "checkpointTotalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20559,
                        "src": "3302:21:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage",
                          "typeString": "struct CheckpointStorage.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20326,
                        "name": "timestamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20319,
                        "src": "3325:9:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage",
                          "typeString": "struct CheckpointStorage.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20324,
                      "name": "getValueAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19919,
                      "src": "3291:10:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage_ptr_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (struct CheckpointStorage.Checkpoint storage ref[] storage pointer,uint256) view returns (uint256)"
                      }
                    },
                    "id": 20327,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3291:44:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 20323,
                  "id": 20328,
                  "nodeType": "Return",
                  "src": "3284:51:60"
                }
              ]
            },
            "documentation": {
              "id": 20317,
              "nodeType": "StructuredDocumentation",
              "src": "3041:157:60",
              "text": " @notice Queries totalSupply at a specific timestamp\n @param timestamp Timestamp of the totalSupply checkpoint\n @return uint256"
            },
            "functionSelector": "981b24d0",
            "id": 20330,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupplyAt",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20320,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20319,
                  "mutability": "mutable",
                  "name": "timestamp",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20330,
                  "src": "3226:17:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20318,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3226:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3225:19:60"
            },
            "returnParameters": {
              "id": 20323,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20322,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20330,
                  "src": "3265:7:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20321,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3265:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3264:9:60"
            },
            "scope": 20550,
            "src": "3203:139:60",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20341,
              "nodeType": "Block",
              "src": "3419:44:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 20337,
                      "name": "holderExists",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20571,
                      "src": "3436:12:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 20339,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 20338,
                      "name": "holder",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20332,
                      "src": "3449:6:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3436:20:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 20336,
                  "id": 20340,
                  "nodeType": "Return",
                  "src": "3429:27:60"
                }
              ]
            },
            "documentation": null,
            "id": 20342,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isExistingHolder",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20333,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20332,
                  "mutability": "mutable",
                  "name": "holder",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20342,
                  "src": "3375:14:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20331,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3375:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3374:16:60"
            },
            "returnParameters": {
              "id": 20336,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20335,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20342,
                  "src": "3413:4:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20334,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3413:4:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3412:6:60"
            },
            "scope": 20550,
            "src": "3348:115:60",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20418,
              "nodeType": "Block",
              "src": "3547:540:60",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 20359,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 20353,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 20351,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20348,
                            "src": "3562:5:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 20352,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3571:1:60",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3562:10:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20354,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3561:12:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 20357,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 20355,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20344,
                            "src": "3578:4:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 20356,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20346,
                            "src": "3586:2:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3578:10:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20358,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3577:12:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3561:28:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 20362,
                  "nodeType": "IfStatement",
                  "src": "3557:65:60",
                  "trueBody": {
                    "id": 20361,
                    "nodeType": "Block",
                    "src": "3591:31:60",
                    "statements": [
                      {
                        "expression": null,
                        "functionReturnParameters": 20350,
                        "id": 20360,
                        "nodeType": "Return",
                        "src": "3605:7:60"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 20376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 20367,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20364,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20346,
                                "src": "3702:2:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 20363,
                              "name": "balanceOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 37753,
                              "src": "3692:9:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view returns (uint256)"
                              }
                            },
                            "id": 20365,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3692:13:60",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 20366,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3709:1:60",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3692:18:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20368,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3691:20:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 20374,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 20369,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20346,
                            "src": "3716:2:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 20372,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3730:1:60",
                                "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": 20371,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3722:7:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 20370,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "3722:7:60",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 20373,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3722:10:60",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "3716:16:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20375,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3715:18:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3691:42:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 20403,
                  "nodeType": "IfStatement",
                  "src": "3687:236:60",
                  "trueBody": {
                    "id": 20402,
                    "nodeType": "Block",
                    "src": "3735:188:60",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20382,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 20377,
                            "name": "holderCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20573,
                            "src": "3749:11:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 20380,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3779:1:60",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 20378,
                                "name": "holderCount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20573,
                                "src": "3763:11:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20379,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 37456,
                              "src": "3763:15:60",
                              "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": 20381,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3763:18:60",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3749:32:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20383,
                        "nodeType": "ExpressionStatement",
                        "src": "3749:32:60"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 20387,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "3799:22:60",
                          "subExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20385,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20346,
                                "src": "3818:2:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 20384,
                              "name": "_isExistingHolder",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20342,
                              "src": "3800:17:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                "typeString": "function (address) view returns (bool)"
                              }
                            },
                            "id": 20386,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3800:21:60",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 20401,
                        "nodeType": "IfStatement",
                        "src": "3795:118:60",
                        "trueBody": {
                          "id": 20400,
                          "nodeType": "Block",
                          "src": "3823:90:60",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 20391,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20346,
                                    "src": "3854:2:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20388,
                                    "name": "holders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20567,
                                    "src": "3841:7:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                      "typeString": "address[] storage ref"
                                    }
                                  },
                                  "id": 20390,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "push",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "3841:12:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$__$",
                                    "typeString": "function (address)"
                                  }
                                },
                                "id": 20392,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3841:16:60",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 20393,
                              "nodeType": "ExpressionStatement",
                              "src": "3841:16:60"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20398,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20394,
                                    "name": "holderExists",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20571,
                                    "src": "3875:12:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                      "typeString": "mapping(address => bool)"
                                    }
                                  },
                                  "id": 20396,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 20395,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20346,
                                    "src": "3888:2:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "3875:16:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 20397,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3894:4:60",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "3875:23:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 20399,
                              "nodeType": "ExpressionStatement",
                              "src": "3875:23:60"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20408,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20404,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20348,
                      "src": "3998:5:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 20406,
                          "name": "from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20344,
                          "src": "4017:4:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 20405,
                        "name": "balanceOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 37753,
                        "src": "4007:9:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address) view returns (uint256)"
                        }
                      },
                      "id": 20407,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4007:15:60",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3998:24:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 20417,
                  "nodeType": "IfStatement",
                  "src": "3994:87:60",
                  "trueBody": {
                    "id": 20416,
                    "nodeType": "Block",
                    "src": "4024:57:60",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 20409,
                            "name": "holderCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20573,
                            "src": "4038:11:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 20412,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4068:1:60",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 20410,
                                "name": "holderCount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20573,
                                "src": "4052:11:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20411,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 37473,
                              "src": "4052:15:60",
                              "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": 20413,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4052:18:60",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4038:32:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20415,
                        "nodeType": "ExpressionStatement",
                        "src": "4038:32:60"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 20419,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_adjustHolderCount",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20349,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20344,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20419,
                  "src": "3497:12:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20343,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3497:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20346,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20419,
                  "src": "3511:10:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20345,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3511:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20348,
                  "mutability": "mutable",
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20419,
                  "src": "3523:13:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20347,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3523:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3496:41:60"
            },
            "returnParameters": {
              "id": 20350,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3547:0:60"
            },
            "scope": 20550,
            "src": "3469:618:60",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20429,
              "nodeType": "Block",
              "src": "4243:71:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20424,
                        "name": "checkpointTotalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20559,
                        "src": "4270:21:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage",
                          "typeString": "struct CheckpointStorage.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 20425,
                          "name": "totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 37739,
                          "src": "4293:11:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 20426,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4293:13:60",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage",
                          "typeString": "struct CheckpointStorage.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20423,
                      "name": "updateValueAtNow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19983,
                      "src": "4253:16:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct CheckpointStorage.Checkpoint storage ref[] storage pointer,uint256)"
                      }
                    },
                    "id": 20427,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4253:54:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20428,
                  "nodeType": "ExpressionStatement",
                  "src": "4253:54:60"
                }
              ]
            },
            "documentation": {
              "id": 20420,
              "nodeType": "StructuredDocumentation",
              "src": "4093:95:60",
              "text": " @notice Internal - adjusts totalSupply at checkpoint before a token transfer"
            },
            "id": 20430,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_adjustTotalSupplyCheckpoints",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20421,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4231:2:60"
            },
            "returnParameters": {
              "id": 20422,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4243:0:60"
            },
            "scope": 20550,
            "src": "4193:121:60",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20445,
              "nodeType": "Block",
              "src": "4547:80:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 20437,
                          "name": "checkpointBalances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20564,
                          "src": "4574:18:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct CheckpointStorage.Checkpoint storage ref[] storage ref)"
                          }
                        },
                        "id": 20439,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 20438,
                          "name": "holder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20433,
                          "src": "4593:6:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4574:26:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage",
                          "typeString": "struct CheckpointStorage.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 20441,
                            "name": "holder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20433,
                            "src": "4612:6:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 20440,
                          "name": "balanceOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 37753,
                          "src": "4602:9:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view returns (uint256)"
                          }
                        },
                        "id": 20442,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4602:17:60",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage",
                          "typeString": "struct CheckpointStorage.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20436,
                      "name": "updateValueAtNow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19983,
                      "src": "4557:16:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct CheckpointStorage.Checkpoint storage ref[] storage pointer,uint256)"
                      }
                    },
                    "id": 20443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4557:63:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20444,
                  "nodeType": "ExpressionStatement",
                  "src": "4557:63:60"
                }
              ]
            },
            "documentation": {
              "id": 20431,
              "nodeType": "StructuredDocumentation",
              "src": "4320:162:60",
              "text": " @notice Internal - adjusts token holder balance at checkpoint before a token transfer\n @param holder address of the token holder affected"
            },
            "id": 20446,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_adjustBalanceCheckpoints",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20434,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20433,
                  "mutability": "mutable",
                  "name": "holder",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20446,
                  "src": "4522:14:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20432,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4522:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4521:16:60"
            },
            "returnParameters": {
              "id": 20435,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4547:0:60"
            },
            "scope": 20550,
            "src": "4487:140:60",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20473,
              "nodeType": "Block",
              "src": "4907:173:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20457,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20449,
                        "src": "4936:4:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20458,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20451,
                        "src": "4942:2:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20459,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20453,
                        "src": "4946:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20456,
                      "name": "_adjustHolderCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20419,
                      "src": "4917:18:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 20460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4917:35:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20461,
                  "nodeType": "ExpressionStatement",
                  "src": "4917:35:60"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 20462,
                      "name": "_adjustTotalSupplyCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20430,
                      "src": "4962:29:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 20463,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4962:31:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20464,
                  "nodeType": "ExpressionStatement",
                  "src": "4962:31:60"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20466,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20449,
                        "src": "5029:4:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 20465,
                      "name": "_adjustBalanceCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20446,
                      "src": "5003:25:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 20467,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5003:31:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20468,
                  "nodeType": "ExpressionStatement",
                  "src": "5003:31:60"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20470,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20451,
                        "src": "5070:2:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 20469,
                      "name": "_adjustBalanceCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20446,
                      "src": "5044:25:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 20471,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5044:29:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20472,
                  "nodeType": "ExpressionStatement",
                  "src": "5044:29:60"
                }
              ]
            },
            "documentation": {
              "id": 20447,
              "nodeType": "StructuredDocumentation",
              "src": "4633:194:60",
              "text": " @notice Updates internal variables when performing a transfer\n @param from sender of transfer\n @param to receiver of transfer\n @param value value of transfer"
            },
            "id": 20474,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_updateTransfer",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20454,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20449,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20474,
                  "src": "4857:12:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20448,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4857:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20451,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20474,
                  "src": "4871:10:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20450,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4871:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20453,
                  "mutability": "mutable",
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20474,
                  "src": "4883:13:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20452,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4883:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4856:41:60"
            },
            "returnParameters": {
              "id": 20455,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4907:0:60"
            },
            "scope": 20550,
            "src": "4832:248:60",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              38029
            ],
            "body": {
              "id": 20498,
              "nodeType": "Block",
              "src": "5197:105:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20485,
                        "name": "tokenHolder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20476,
                        "src": "5219:11:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20486,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20478,
                        "src": "5232:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 20482,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "5207:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_CheckpointedToken_$20550",
                          "typeString": "contract super CheckpointedToken"
                        }
                      },
                      "id": 20484,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 38029,
                      "src": "5207:11:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 20487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5207:31:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20488,
                  "nodeType": "ExpressionStatement",
                  "src": "5207:31:60"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 20492,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5272:1:60",
                            "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": 20491,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5264:7:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 20490,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5264:7:60",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 20493,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5264:10:60",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20494,
                        "name": "tokenHolder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20476,
                        "src": "5276:11:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20495,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20478,
                        "src": "5289:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20489,
                      "name": "_updateTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20474,
                      "src": "5248:15:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 20496,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5248:47:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20497,
                  "nodeType": "ExpressionStatement",
                  "src": "5248:47:60"
                }
              ]
            },
            "documentation": null,
            "id": 20499,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 20480,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5184:8:60"
            },
            "parameters": {
              "id": 20479,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20476,
                  "mutability": "mutable",
                  "name": "tokenHolder",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20499,
                  "src": "5110:19:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20475,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5110:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20478,
                  "mutability": "mutable",
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20499,
                  "src": "5139:13:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20477,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5139:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5100:58:60"
            },
            "returnParameters": {
              "id": 20481,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5197:0:60"
            },
            "scope": 20550,
            "src": "5086:216:60",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              38085
            ],
            "body": {
              "id": 20523,
              "nodeType": "Block",
              "src": "5419:105:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20510,
                        "name": "tokenHolder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20501,
                        "src": "5441:11:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20511,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20503,
                        "src": "5454:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 20507,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "5429:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_CheckpointedToken_$20550",
                          "typeString": "contract super CheckpointedToken"
                        }
                      },
                      "id": 20509,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 38085,
                      "src": "5429:11:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 20512,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5429:31:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20513,
                  "nodeType": "ExpressionStatement",
                  "src": "5429:31:60"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20515,
                        "name": "tokenHolder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20501,
                        "src": "5486:11:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 20518,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5507:1:60",
                            "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": 20517,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5499:7:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 20516,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5499:7:60",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 20519,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5499:10:60",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20520,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20503,
                        "src": "5511:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20514,
                      "name": "_updateTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20474,
                      "src": "5470:15:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 20521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5470:47:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20522,
                  "nodeType": "ExpressionStatement",
                  "src": "5470:47:60"
                }
              ]
            },
            "documentation": null,
            "id": 20524,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_burn",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 20505,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5406:8:60"
            },
            "parameters": {
              "id": 20504,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20501,
                  "mutability": "mutable",
                  "name": "tokenHolder",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20524,
                  "src": "5332:19:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20500,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5332:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20503,
                  "mutability": "mutable",
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20524,
                  "src": "5361:13:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20502,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5361:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5322:58:60"
            },
            "returnParameters": {
              "id": 20506,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5419:0:60"
            },
            "scope": 20550,
            "src": "5308:216:60",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              37974
            ],
            "body": {
              "id": 20548,
              "nodeType": "Block",
              "src": "5674:91:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20537,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20526,
                        "src": "5700:4:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20538,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20528,
                        "src": "5706:2:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20539,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20530,
                        "src": "5710:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 20534,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "5684:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_CheckpointedToken_$20550",
                          "typeString": "contract super CheckpointedToken"
                        }
                      },
                      "id": 20536,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 37974,
                      "src": "5684:15:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 20540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5684:32:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20541,
                  "nodeType": "ExpressionStatement",
                  "src": "5684:32:60"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20543,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20526,
                        "src": "5742:4:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20544,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20528,
                        "src": "5748:2:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20545,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20530,
                        "src": "5752:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20542,
                      "name": "_updateTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20474,
                      "src": "5726:15:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 20546,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5726:32:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20547,
                  "nodeType": "ExpressionStatement",
                  "src": "5726:32:60"
                }
              ]
            },
            "documentation": null,
            "id": 20549,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_transfer",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 20532,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5661:8:60"
            },
            "parameters": {
              "id": 20531,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20526,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20549,
                  "src": "5558:12:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20525,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5558:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20528,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20549,
                  "src": "5580:10:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20527,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5580:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20530,
                  "mutability": "mutable",
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20549,
                  "src": "5600:13:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20529,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5600:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5548:71:60"
            },
            "returnParameters": {
              "id": 20533,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5674:0:60"
            },
            "scope": 20550,
            "src": "5530:235:60",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          }
        ],
        "scope": 20551,
        "src": "227:5540:60"
      }
    ],
    "src": "41:5727:60"
  },
  "legacyAST": {
    "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/CheckpointedToken/CheckpointedToken.sol",
    "exportedSymbols": {
      "CheckpointedToken": [
        20550
      ]
    },
    "id": 20551,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 19994,
        "literals": [
          "solidity",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:23:60"
      },
      {
        "id": 19995,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "65:33:60"
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/ERC20.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/ERC20.sol",
        "id": 19996,
        "nodeType": "ImportDirective",
        "scope": 20551,
        "sourceUnit": 38158,
        "src": "100:82:60",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/ICT/CheckpointedToken/CheckpointedTokenStorage.sol",
        "file": "./CheckpointedTokenStorage.sol",
        "id": 19997,
        "nodeType": "ImportDirective",
        "scope": 20551,
        "sourceUnit": 20579,
        "src": "184:40:60",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 19998,
              "name": "ERC20UpgradeSafe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 38157,
              "src": "257:16:60",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20UpgradeSafe_$38157",
                "typeString": "contract ERC20UpgradeSafe"
              }
            },
            "id": 19999,
            "nodeType": "InheritanceSpecifier",
            "src": "257:16:60"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 20000,
              "name": "CheckpointedTokenStorage",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20578,
              "src": "275:24:60",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CheckpointedTokenStorage_$20578",
                "typeString": "contract CheckpointedTokenStorage"
              }
            },
            "id": 20001,
            "nodeType": "InheritanceSpecifier",
            "src": "275:24:60"
          }
        ],
        "contractDependencies": [
          19984,
          19992,
          20578,
          37222,
          37297,
          38157,
          38235
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 20550,
        "linearizedBaseContracts": [
          20550,
          20578,
          19984,
          19992,
          38157,
          38235,
          37222,
          37297
        ],
        "name": "CheckpointedToken",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 20016,
              "nodeType": "Block",
              "src": "506:43:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20012,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20004,
                        "src": "529:4:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20013,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20006,
                        "src": "535:6:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 20011,
                      "name": "__ERC20_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 37680,
                      "src": "516:12:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory,string memory)"
                      }
                    },
                    "id": 20014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "516:26:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20015,
                  "nodeType": "ExpressionStatement",
                  "src": "516:26:60"
                }
              ]
            },
            "documentation": {
              "id": 20002,
              "nodeType": "StructuredDocumentation",
              "src": "307:113:60",
              "text": " @notice Initialize a new instance storage\n @dev \"constructor\" to be called on deployment"
            },
            "functionSelector": "4cd88b76",
            "id": 20017,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 20009,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20008,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 37270,
                  "src": "494:11:60",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "494:11:60"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20007,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20004,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20017,
                  "src": "445:18:60",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 20003,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "445:6:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20006,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20017,
                  "src": "465:20:60",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 20005,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "465:6:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "444:42:60"
            },
            "returnParameters": {
              "id": 20010,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "506:0:60"
            },
            "scope": 20550,
            "src": "425:124:60",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20126,
              "nodeType": "Block",
              "src": "852:642:60",
              "statements": [
                {
                  "assignments": [
                    20027
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20027,
                      "mutability": "mutable",
                      "name": "count",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20126,
                      "src": "862:13:60",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 20026,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "862:7:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20028,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "862:13:60"
                },
                {
                  "assignments": [
                    20030
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20030,
                      "mutability": "mutable",
                      "name": "i",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20126,
                      "src": "885:9:60",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 20029,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "885:7:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20031,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "885:9:60"
                },
                {
                  "assignments": [
                    20036
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20036,
                      "mutability": "mutable",
                      "name": "activeHolders",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20126,
                      "src": "904:30:60",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 20034,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "904:7:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 20035,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "904:9:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20038,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 20037,
                    "name": "holders",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 20567,
                    "src": "937:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "904:40:60"
                },
                {
                  "body": {
                    "id": 20073,
                    "nodeType": "Block",
                    "src": "997:185:60",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 20057,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 20051,
                                  "name": "activeHolders",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20036,
                                  "src": "1027:13:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 20053,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 20052,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20030,
                                  "src": "1041:1:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "1027:16:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 20054,
                                "name": "checkpointId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20020,
                                "src": "1045:12:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 20050,
                              "name": "balanceOfAt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20316,
                              "src": "1015:11:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (address,uint256) view returns (uint256)"
                              }
                            },
                            "id": 20055,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1015:43:60",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 20056,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1061:1:60",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1015:47:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 20071,
                          "nodeType": "Block",
                          "src": "1110:62:60",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20069,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20062,
                                    "name": "activeHolders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20036,
                                    "src": "1128:13:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 20064,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 20063,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20030,
                                    "src": "1142:1:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "1128:16:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 20067,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1155:1:60",
                                      "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": 20066,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1147:7:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 20065,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1147:7:60",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 20068,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1147:10:60",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "src": "1128:29:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 20070,
                              "nodeType": "ExpressionStatement",
                              "src": "1128:29:60"
                            }
                          ]
                        },
                        "id": 20072,
                        "nodeType": "IfStatement",
                        "src": "1011:161:60",
                        "trueBody": {
                          "id": 20061,
                          "nodeType": "Block",
                          "src": "1064:40:60",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20059,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "1082:7:60",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 20058,
                                  "name": "count",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20027,
                                  "src": "1082:5:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20060,
                              "nodeType": "ExpressionStatement",
                              "src": "1082:7:60"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20046,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20043,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20030,
                      "src": "966:1:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20044,
                        "name": "activeHolders",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20036,
                        "src": "970:13:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 20045,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "970:20:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "966:24:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20074,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20041,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 20039,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20030,
                        "src": "959:1:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 20040,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "963:1:60",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "959:5:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 20042,
                    "nodeType": "ExpressionStatement",
                    "src": "959:5:60"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20048,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "992:3:60",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 20047,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20030,
                        "src": "992:1:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 20049,
                    "nodeType": "ExpressionStatement",
                    "src": "992:3:60"
                  },
                  "nodeType": "ForStatement",
                  "src": "954:228:60"
                },
                {
                  "assignments": [
                    20079
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20079,
                      "mutability": "mutable",
                      "name": "_holders",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20126,
                      "src": "1191:25:60",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 20077,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1191:7:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 20078,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "1191:9:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20085,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20083,
                        "name": "count",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20027,
                        "src": "1233:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20082,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "1219:13:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 20080,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1223:7:60",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 20081,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "1223:9:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 20084,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1219:20:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1191:48:60"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20088,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20086,
                      "name": "count",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20027,
                      "src": "1249:5:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 20087,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1257:1:60",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1249:9:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20089,
                  "nodeType": "ExpressionStatement",
                  "src": "1249:9:60"
                },
                {
                  "body": {
                    "id": 20122,
                    "nodeType": "Block",
                    "src": "1311:152:60",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 20108,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 20101,
                              "name": "activeHolders",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20036,
                              "src": "1329:13:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            "id": 20103,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 20102,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20030,
                              "src": "1343:1:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "1329:16:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 20106,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1357:1:60",
                                "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": 20105,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1349:7:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 20104,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1349:7:60",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 20107,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1349:10:60",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "1329:30:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 20121,
                        "nodeType": "IfStatement",
                        "src": "1325:128:60",
                        "trueBody": {
                          "id": 20120,
                          "nodeType": "Block",
                          "src": "1361:92:60",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20115,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20109,
                                    "name": "_holders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20079,
                                    "src": "1379:8:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 20111,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 20110,
                                    "name": "count",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20027,
                                    "src": "1388:5:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "1379:15:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20112,
                                    "name": "activeHolders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20036,
                                    "src": "1397:13:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 20114,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 20113,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20030,
                                    "src": "1411:1:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "1397:16:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "1379:34:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 20116,
                              "nodeType": "ExpressionStatement",
                              "src": "1379:34:60"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20118,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "1431:7:60",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 20117,
                                  "name": "count",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20027,
                                  "src": "1431:5:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20119,
                              "nodeType": "ExpressionStatement",
                              "src": "1431:7:60"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20097,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20094,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20030,
                      "src": "1280:1:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20095,
                        "name": "activeHolders",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20036,
                        "src": "1284:13:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 20096,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1284:20:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1280:24:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20123,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20092,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 20090,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20030,
                        "src": "1273:1:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 20091,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1277:1:60",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "1273:5:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 20093,
                    "nodeType": "ExpressionStatement",
                    "src": "1273:5:60"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20099,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "1306:3:60",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 20098,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20030,
                        "src": "1306:1:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 20100,
                    "nodeType": "ExpressionStatement",
                    "src": "1306:3:60"
                  },
                  "nodeType": "ForStatement",
                  "src": "1268:195:60"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20124,
                    "name": "_holders",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 20079,
                    "src": "1479:8:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "functionReturnParameters": 20025,
                  "id": 20125,
                  "nodeType": "Return",
                  "src": "1472:15:60"
                }
              ]
            },
            "documentation": {
              "id": 20018,
              "nodeType": "StructuredDocumentation",
              "src": "555:210:60",
              "text": " @notice returns an array of holders with non zero balance at a given checkpoint\n @param checkpointId Checkpoint id at which holder list is to be populated\n @return list of holders"
            },
            "functionSelector": "520fdd22",
            "id": 20127,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getHoldersAt",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20020,
                  "mutability": "mutable",
                  "name": "checkpointId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20127,
                  "src": "792:20:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20019,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "792:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "791:22:60"
            },
            "returnParameters": {
              "id": 20025,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20024,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20127,
                  "src": "834:16:60",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 20022,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "834:7:60",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 20023,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "834:9:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "833:18:60"
            },
            "scope": 20550,
            "src": "770:724:60",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20288,
              "nodeType": "Block",
              "src": "1673:898:60",
              "statements": [
                {
                  "assignments": [
                    20140
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20140,
                      "mutability": "mutable",
                      "name": "size",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20288,
                      "src": "1683:12:60",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 20139,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1683:7:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20143,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 20141,
                      "name": "holders",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20567,
                      "src": "1698:7:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                        "typeString": "address[] storage ref"
                      }
                    },
                    "id": 20142,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "1698:14:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1683:29:60"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20146,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20144,
                      "name": "end",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20133,
                      "src": "1726:3:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 20145,
                      "name": "size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20140,
                      "src": "1733:4:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1726:11:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 20162,
                    "nodeType": "Block",
                    "src": "1789:47:60",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20160,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 20154,
                            "name": "size",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20140,
                            "src": "1803:4:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 20159,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 20157,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 20155,
                                "name": "end",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20133,
                                "src": "1810:3:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 20156,
                                "name": "start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20131,
                                "src": "1816:5:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1810:11:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 20158,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1824:1:60",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "1810:15:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1803:22:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20161,
                        "nodeType": "ExpressionStatement",
                        "src": "1803:22:60"
                      }
                    ]
                  },
                  "id": 20163,
                  "nodeType": "IfStatement",
                  "src": "1722:114:60",
                  "trueBody": {
                    "id": 20153,
                    "nodeType": "Block",
                    "src": "1739:44:60",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20151,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 20147,
                            "name": "size",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20140,
                            "src": "1753:4:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 20150,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 20148,
                              "name": "size",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20140,
                              "src": "1760:4:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 20149,
                              "name": "start",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20131,
                              "src": "1767:5:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1760:12:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1753:19:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20152,
                        "nodeType": "ExpressionStatement",
                        "src": "1753:19:60"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    20168
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20168,
                      "mutability": "mutable",
                      "name": "holderSubset",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20288,
                      "src": "1845:29:60",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 20166,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1845:7:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 20167,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "1845:9:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20174,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20172,
                        "name": "size",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20140,
                        "src": "1891:4:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20171,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "1877:13:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 20169,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1881:7:60",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 20170,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "1881:9:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 20173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1877:19:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1845:51:60"
                },
                {
                  "body": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20192,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 20184,
                          "name": "holderSubset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20168,
                          "src": "1948:12:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "id": 20186,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 20185,
                          "name": "j",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20176,
                          "src": "1961:1:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "nodeType": "IndexAccess",
                        "src": "1948:15:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 20187,
                          "name": "holders",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20567,
                          "src": "1966:7:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage",
                            "typeString": "address[] storage ref"
                          }
                        },
                        "id": 20191,
                        "indexExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 20190,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 20188,
                            "name": "j",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20176,
                            "src": "1974:1:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 20189,
                            "name": "start",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20131,
                            "src": "1978:5:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1974:9:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1966:18:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "1948:36:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 20193,
                    "nodeType": "ExpressionStatement",
                    "src": "1948:36:60"
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20180,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20178,
                      "name": "j",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20176,
                      "src": "1921:1:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 20179,
                      "name": "size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20140,
                      "src": "1925:4:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1921:8:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20194,
                  "initializationExpression": {
                    "assignments": [
                      20176
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 20176,
                        "mutability": "mutable",
                        "name": "j",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 20194,
                        "src": "1910:9:60",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 20175,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1910:7:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 20177,
                    "initialValue": null,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1910:9:60"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20182,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "1931:3:60",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 20181,
                        "name": "j",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20176,
                        "src": "1931:1:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 20183,
                    "nodeType": "ExpressionStatement",
                    "src": "1931:3:60"
                  },
                  "nodeType": "ForStatement",
                  "src": "1906:78:60"
                },
                {
                  "assignments": [
                    20196
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20196,
                      "mutability": "mutable",
                      "name": "count",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20288,
                      "src": "1995:13:60",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 20195,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1995:7:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20197,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1995:13:60"
                },
                {
                  "assignments": [
                    20199
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20199,
                      "mutability": "mutable",
                      "name": "i",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20288,
                      "src": "2018:9:60",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 20198,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2018:7:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20200,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2018:9:60"
                },
                {
                  "body": {
                    "id": 20235,
                    "nodeType": "Block",
                    "src": "2079:183:60",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 20219,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 20213,
                                  "name": "holderSubset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20168,
                                  "src": "2109:12:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                },
                                "id": 20215,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 20214,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20199,
                                  "src": "2122:1:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "2109:15:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 20216,
                                "name": "checkpointId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20129,
                                "src": "2126:12:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 20212,
                              "name": "balanceOfAt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20316,
                              "src": "2097:11:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (address,uint256) view returns (uint256)"
                              }
                            },
                            "id": 20217,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2097:42:60",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 20218,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2142:1:60",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2097:46:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 20233,
                          "nodeType": "Block",
                          "src": "2191:61:60",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20231,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20224,
                                    "name": "holderSubset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20168,
                                    "src": "2209:12:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 20226,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 20225,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20199,
                                    "src": "2222:1:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "2209:15:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 20229,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2235:1:60",
                                      "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": 20228,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2227:7:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 20227,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2227:7:60",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 20230,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2227:10:60",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "src": "2209:28:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 20232,
                              "nodeType": "ExpressionStatement",
                              "src": "2209:28:60"
                            }
                          ]
                        },
                        "id": 20234,
                        "nodeType": "IfStatement",
                        "src": "2093:159:60",
                        "trueBody": {
                          "id": 20223,
                          "nodeType": "Block",
                          "src": "2145:40:60",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20221,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "2163:7:60",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 20220,
                                  "name": "count",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20196,
                                  "src": "2163:5:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20222,
                              "nodeType": "ExpressionStatement",
                              "src": "2163:7:60"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20208,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20205,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20199,
                      "src": "2049:1:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20206,
                        "name": "holderSubset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20168,
                        "src": "2053:12:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 20207,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2053:19:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2049:23:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20236,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20203,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 20201,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20199,
                        "src": "2042:1:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 20202,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2046:1:60",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2042:5:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 20204,
                    "nodeType": "ExpressionStatement",
                    "src": "2042:5:60"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20210,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2074:3:60",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 20209,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20199,
                        "src": "2074:1:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 20211,
                    "nodeType": "ExpressionStatement",
                    "src": "2074:3:60"
                  },
                  "nodeType": "ForStatement",
                  "src": "2037:225:60"
                },
                {
                  "assignments": [
                    20241
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20241,
                      "mutability": "mutable",
                      "name": "_holders",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 20288,
                      "src": "2271:25:60",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 20239,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2271:7:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 20240,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2271:9:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20247,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20245,
                        "name": "count",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20196,
                        "src": "2313:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20244,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2299:13:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (address[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 20242,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2303:7:60",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 20243,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2303:9:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        }
                      }
                    },
                    "id": 20246,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2299:20:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2271:48:60"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20250,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20248,
                      "name": "count",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20196,
                      "src": "2329:5:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 20249,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2337:1:60",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2329:9:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20251,
                  "nodeType": "ExpressionStatement",
                  "src": "2329:9:60"
                },
                {
                  "body": {
                    "id": 20284,
                    "nodeType": "Block",
                    "src": "2390:150:60",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 20270,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 20263,
                              "name": "holderSubset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20168,
                              "src": "2408:12:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            "id": 20265,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 20264,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20199,
                              "src": "2421:1:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2408:15:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 20268,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2435:1:60",
                                "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": 20267,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2427:7:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 20266,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2427:7:60",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 20269,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2427:10:60",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "2408:29:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 20283,
                        "nodeType": "IfStatement",
                        "src": "2404:126:60",
                        "trueBody": {
                          "id": 20282,
                          "nodeType": "Block",
                          "src": "2439:91:60",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20277,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20271,
                                    "name": "_holders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20241,
                                    "src": "2457:8:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 20273,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 20272,
                                    "name": "count",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20196,
                                    "src": "2466:5:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "2457:15:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20274,
                                    "name": "holderSubset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20168,
                                    "src": "2475:12:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                      "typeString": "address[] memory"
                                    }
                                  },
                                  "id": 20276,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 20275,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20199,
                                    "src": "2488:1:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2475:15:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "2457:33:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 20278,
                              "nodeType": "ExpressionStatement",
                              "src": "2457:33:60"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20280,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "2508:7:60",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 20279,
                                  "name": "count",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20196,
                                  "src": "2508:5:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20281,
                              "nodeType": "ExpressionStatement",
                              "src": "2508:7:60"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20259,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20256,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20199,
                      "src": "2360:1:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20257,
                        "name": "holderSubset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20168,
                        "src": "2364:12:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 20258,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2364:19:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2360:23:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20285,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20254,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 20252,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20199,
                        "src": "2353:1:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 20253,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2357:1:60",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2353:5:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 20255,
                    "nodeType": "ExpressionStatement",
                    "src": "2353:5:60"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20261,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2385:3:60",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 20260,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20199,
                        "src": "2385:1:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 20262,
                    "nodeType": "ExpressionStatement",
                    "src": "2385:3:60"
                  },
                  "nodeType": "ForStatement",
                  "src": "2348:192:60"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20286,
                    "name": "_holders",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 20241,
                    "src": "2556:8:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                      "typeString": "address[] memory"
                    }
                  },
                  "functionReturnParameters": 20138,
                  "id": 20287,
                  "nodeType": "Return",
                  "src": "2549:15:60"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "31801925",
            "id": 20289,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getHolderSubsetAt",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20134,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20129,
                  "mutability": "mutable",
                  "name": "checkpointId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20289,
                  "src": "1536:20:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20128,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1536:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20131,
                  "mutability": "mutable",
                  "name": "start",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20289,
                  "src": "1566:13:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20130,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1566:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20133,
                  "mutability": "mutable",
                  "name": "end",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20289,
                  "src": "1589:11:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20132,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1589:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1526:80:60"
            },
            "returnParameters": {
              "id": 20138,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20137,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20289,
                  "src": "1651:16:60",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 20135,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1651:7:60",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 20136,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1651:9:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1650:18:60"
            },
            "scope": 20550,
            "src": "1500:1071:60",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20297,
              "nodeType": "Block",
              "src": "2636:38:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 20294,
                      "name": "holders",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20567,
                      "src": "2653:7:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                        "typeString": "address[] storage ref"
                      }
                    },
                    "id": 20295,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "2653:14:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 20293,
                  "id": 20296,
                  "nodeType": "Return",
                  "src": "2646:21:60"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "308feec3",
            "id": 20298,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getNumberOfHolders",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20290,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2604:2:60"
            },
            "returnParameters": {
              "id": 20293,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20292,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20298,
                  "src": "2627:7:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20291,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2627:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2626:9:60"
            },
            "scope": 20550,
            "src": "2577:97:60",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20315,
              "nodeType": "Block",
              "src": "2962:73:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 20309,
                          "name": "checkpointBalances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20564,
                          "src": "2990:18:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct CheckpointStorage.Checkpoint storage ref[] storage ref)"
                          }
                        },
                        "id": 20311,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 20310,
                          "name": "holder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20301,
                          "src": "3009:6:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2990:26:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage",
                          "typeString": "struct CheckpointStorage.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20312,
                        "name": "timestamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20303,
                        "src": "3018:9:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage",
                          "typeString": "struct CheckpointStorage.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20308,
                      "name": "getValueAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19919,
                      "src": "2979:10:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage_ptr_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (struct CheckpointStorage.Checkpoint storage ref[] storage pointer,uint256) view returns (uint256)"
                      }
                    },
                    "id": 20313,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2979:49:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 20307,
                  "id": 20314,
                  "nodeType": "Return",
                  "src": "2972:56:60"
                }
              ]
            },
            "documentation": {
              "id": 20299,
              "nodeType": "StructuredDocumentation",
              "src": "2680:192:60",
              "text": " @notice Queries the balances of a holder at a specific timestamp\n @param holder Holder to query balance for\n @param timestamp Timestamp of the balance checkpoint"
            },
            "functionSelector": "4ee2cd7e",
            "id": 20316,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOfAt",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20304,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20301,
                  "mutability": "mutable",
                  "name": "holder",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20316,
                  "src": "2898:14:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20300,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2898:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20303,
                  "mutability": "mutable",
                  "name": "timestamp",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20316,
                  "src": "2914:17:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20302,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2914:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2897:35:60"
            },
            "returnParameters": {
              "id": 20307,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20306,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20316,
                  "src": "2953:7:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20305,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2953:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2952:9:60"
            },
            "scope": 20550,
            "src": "2877:158:60",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20329,
              "nodeType": "Block",
              "src": "3274:68:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20325,
                        "name": "checkpointTotalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20559,
                        "src": "3302:21:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage",
                          "typeString": "struct CheckpointStorage.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20326,
                        "name": "timestamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20319,
                        "src": "3325:9:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage",
                          "typeString": "struct CheckpointStorage.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20324,
                      "name": "getValueAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19919,
                      "src": "3291:10:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage_ptr_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (struct CheckpointStorage.Checkpoint storage ref[] storage pointer,uint256) view returns (uint256)"
                      }
                    },
                    "id": 20327,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3291:44:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 20323,
                  "id": 20328,
                  "nodeType": "Return",
                  "src": "3284:51:60"
                }
              ]
            },
            "documentation": {
              "id": 20317,
              "nodeType": "StructuredDocumentation",
              "src": "3041:157:60",
              "text": " @notice Queries totalSupply at a specific timestamp\n @param timestamp Timestamp of the totalSupply checkpoint\n @return uint256"
            },
            "functionSelector": "981b24d0",
            "id": 20330,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupplyAt",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20320,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20319,
                  "mutability": "mutable",
                  "name": "timestamp",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20330,
                  "src": "3226:17:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20318,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3226:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3225:19:60"
            },
            "returnParameters": {
              "id": 20323,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20322,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20330,
                  "src": "3265:7:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20321,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3265:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3264:9:60"
            },
            "scope": 20550,
            "src": "3203:139:60",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20341,
              "nodeType": "Block",
              "src": "3419:44:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 20337,
                      "name": "holderExists",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20571,
                      "src": "3436:12:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 20339,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 20338,
                      "name": "holder",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20332,
                      "src": "3449:6:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3436:20:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 20336,
                  "id": 20340,
                  "nodeType": "Return",
                  "src": "3429:27:60"
                }
              ]
            },
            "documentation": null,
            "id": 20342,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isExistingHolder",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20333,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20332,
                  "mutability": "mutable",
                  "name": "holder",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20342,
                  "src": "3375:14:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20331,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3375:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3374:16:60"
            },
            "returnParameters": {
              "id": 20336,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20335,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20342,
                  "src": "3413:4:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20334,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3413:4:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3412:6:60"
            },
            "scope": 20550,
            "src": "3348:115:60",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20418,
              "nodeType": "Block",
              "src": "3547:540:60",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 20359,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 20353,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 20351,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20348,
                            "src": "3562:5:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 20352,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3571:1:60",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3562:10:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20354,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3561:12:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 20357,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 20355,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20344,
                            "src": "3578:4:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 20356,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20346,
                            "src": "3586:2:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3578:10:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20358,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3577:12:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3561:28:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 20362,
                  "nodeType": "IfStatement",
                  "src": "3557:65:60",
                  "trueBody": {
                    "id": 20361,
                    "nodeType": "Block",
                    "src": "3591:31:60",
                    "statements": [
                      {
                        "expression": null,
                        "functionReturnParameters": 20350,
                        "id": 20360,
                        "nodeType": "Return",
                        "src": "3605:7:60"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 20376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 20367,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20364,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20346,
                                "src": "3702:2:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 20363,
                              "name": "balanceOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 37753,
                              "src": "3692:9:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view returns (uint256)"
                              }
                            },
                            "id": 20365,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3692:13:60",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 20366,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3709:1:60",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3692:18:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20368,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3691:20:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 20374,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 20369,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20346,
                            "src": "3716:2:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 20372,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3730:1:60",
                                "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": 20371,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3722:7:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 20370,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "3722:7:60",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 20373,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3722:10:60",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "3716:16:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 20375,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3715:18:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3691:42:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 20403,
                  "nodeType": "IfStatement",
                  "src": "3687:236:60",
                  "trueBody": {
                    "id": 20402,
                    "nodeType": "Block",
                    "src": "3735:188:60",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20382,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 20377,
                            "name": "holderCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20573,
                            "src": "3749:11:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 20380,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3779:1:60",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 20378,
                                "name": "holderCount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20573,
                                "src": "3763:11:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20379,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 37456,
                              "src": "3763:15:60",
                              "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": 20381,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3763:18:60",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3749:32:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20383,
                        "nodeType": "ExpressionStatement",
                        "src": "3749:32:60"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 20387,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "3799:22:60",
                          "subExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20385,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20346,
                                "src": "3818:2:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 20384,
                              "name": "_isExistingHolder",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20342,
                              "src": "3800:17:60",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                "typeString": "function (address) view returns (bool)"
                              }
                            },
                            "id": 20386,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3800:21:60",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 20401,
                        "nodeType": "IfStatement",
                        "src": "3795:118:60",
                        "trueBody": {
                          "id": 20400,
                          "nodeType": "Block",
                          "src": "3823:90:60",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 20391,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20346,
                                    "src": "3854:2:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20388,
                                    "name": "holders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20567,
                                    "src": "3841:7:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                      "typeString": "address[] storage ref"
                                    }
                                  },
                                  "id": 20390,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "push",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "3841:12:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$__$",
                                    "typeString": "function (address)"
                                  }
                                },
                                "id": 20392,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3841:16:60",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 20393,
                              "nodeType": "ExpressionStatement",
                              "src": "3841:16:60"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 20398,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20394,
                                    "name": "holderExists",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20571,
                                    "src": "3875:12:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                      "typeString": "mapping(address => bool)"
                                    }
                                  },
                                  "id": 20396,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 20395,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20346,
                                    "src": "3888:2:60",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "3875:16:60",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 20397,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3894:4:60",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "3875:23:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 20399,
                              "nodeType": "ExpressionStatement",
                              "src": "3875:23:60"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20408,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20404,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20348,
                      "src": "3998:5:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 20406,
                          "name": "from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20344,
                          "src": "4017:4:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 20405,
                        "name": "balanceOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 37753,
                        "src": "4007:9:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address) view returns (uint256)"
                        }
                      },
                      "id": 20407,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4007:15:60",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3998:24:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 20417,
                  "nodeType": "IfStatement",
                  "src": "3994:87:60",
                  "trueBody": {
                    "id": 20416,
                    "nodeType": "Block",
                    "src": "4024:57:60",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 20409,
                            "name": "holderCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20573,
                            "src": "4038:11:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 20412,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4068:1:60",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 20410,
                                "name": "holderCount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20573,
                                "src": "4052:11:60",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 20411,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 37473,
                              "src": "4052:15:60",
                              "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": 20413,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4052:18:60",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4038:32:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 20415,
                        "nodeType": "ExpressionStatement",
                        "src": "4038:32:60"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 20419,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_adjustHolderCount",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20349,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20344,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20419,
                  "src": "3497:12:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20343,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3497:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20346,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20419,
                  "src": "3511:10:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20345,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3511:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20348,
                  "mutability": "mutable",
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20419,
                  "src": "3523:13:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20347,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3523:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3496:41:60"
            },
            "returnParameters": {
              "id": 20350,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3547:0:60"
            },
            "scope": 20550,
            "src": "3469:618:60",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20429,
              "nodeType": "Block",
              "src": "4243:71:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20424,
                        "name": "checkpointTotalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20559,
                        "src": "4270:21:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage",
                          "typeString": "struct CheckpointStorage.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 20425,
                          "name": "totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 37739,
                          "src": "4293:11:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 20426,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4293:13:60",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage",
                          "typeString": "struct CheckpointStorage.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20423,
                      "name": "updateValueAtNow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19983,
                      "src": "4253:16:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct CheckpointStorage.Checkpoint storage ref[] storage pointer,uint256)"
                      }
                    },
                    "id": 20427,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4253:54:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20428,
                  "nodeType": "ExpressionStatement",
                  "src": "4253:54:60"
                }
              ]
            },
            "documentation": {
              "id": 20420,
              "nodeType": "StructuredDocumentation",
              "src": "4093:95:60",
              "text": " @notice Internal - adjusts totalSupply at checkpoint before a token transfer"
            },
            "id": 20430,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_adjustTotalSupplyCheckpoints",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20421,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4231:2:60"
            },
            "returnParameters": {
              "id": 20422,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4243:0:60"
            },
            "scope": 20550,
            "src": "4193:121:60",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20445,
              "nodeType": "Block",
              "src": "4547:80:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 20437,
                          "name": "checkpointBalances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20564,
                          "src": "4574:18:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct CheckpointStorage.Checkpoint storage ref[] storage ref)"
                          }
                        },
                        "id": 20439,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 20438,
                          "name": "holder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20433,
                          "src": "4593:6:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4574:26:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage",
                          "typeString": "struct CheckpointStorage.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 20441,
                            "name": "holder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20433,
                            "src": "4612:6:60",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 20440,
                          "name": "balanceOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 37753,
                          "src": "4602:9:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view returns (uint256)"
                          }
                        },
                        "id": 20442,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4602:17:60",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage",
                          "typeString": "struct CheckpointStorage.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20436,
                      "name": "updateValueAtNow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19983,
                      "src": "4557:16:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$19991_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct CheckpointStorage.Checkpoint storage ref[] storage pointer,uint256)"
                      }
                    },
                    "id": 20443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4557:63:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20444,
                  "nodeType": "ExpressionStatement",
                  "src": "4557:63:60"
                }
              ]
            },
            "documentation": {
              "id": 20431,
              "nodeType": "StructuredDocumentation",
              "src": "4320:162:60",
              "text": " @notice Internal - adjusts token holder balance at checkpoint before a token transfer\n @param holder address of the token holder affected"
            },
            "id": 20446,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_adjustBalanceCheckpoints",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20434,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20433,
                  "mutability": "mutable",
                  "name": "holder",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20446,
                  "src": "4522:14:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20432,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4522:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4521:16:60"
            },
            "returnParameters": {
              "id": 20435,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4547:0:60"
            },
            "scope": 20550,
            "src": "4487:140:60",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20473,
              "nodeType": "Block",
              "src": "4907:173:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20457,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20449,
                        "src": "4936:4:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20458,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20451,
                        "src": "4942:2:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20459,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20453,
                        "src": "4946:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20456,
                      "name": "_adjustHolderCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20419,
                      "src": "4917:18:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 20460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4917:35:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20461,
                  "nodeType": "ExpressionStatement",
                  "src": "4917:35:60"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 20462,
                      "name": "_adjustTotalSupplyCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20430,
                      "src": "4962:29:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 20463,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4962:31:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20464,
                  "nodeType": "ExpressionStatement",
                  "src": "4962:31:60"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20466,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20449,
                        "src": "5029:4:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 20465,
                      "name": "_adjustBalanceCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20446,
                      "src": "5003:25:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 20467,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5003:31:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20468,
                  "nodeType": "ExpressionStatement",
                  "src": "5003:31:60"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20470,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20451,
                        "src": "5070:2:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 20469,
                      "name": "_adjustBalanceCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20446,
                      "src": "5044:25:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 20471,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5044:29:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20472,
                  "nodeType": "ExpressionStatement",
                  "src": "5044:29:60"
                }
              ]
            },
            "documentation": {
              "id": 20447,
              "nodeType": "StructuredDocumentation",
              "src": "4633:194:60",
              "text": " @notice Updates internal variables when performing a transfer\n @param from sender of transfer\n @param to receiver of transfer\n @param value value of transfer"
            },
            "id": 20474,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_updateTransfer",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 20454,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20449,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20474,
                  "src": "4857:12:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20448,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4857:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20451,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20474,
                  "src": "4871:10:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20450,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4871:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20453,
                  "mutability": "mutable",
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20474,
                  "src": "4883:13:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20452,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4883:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4856:41:60"
            },
            "returnParameters": {
              "id": 20455,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4907:0:60"
            },
            "scope": 20550,
            "src": "4832:248:60",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              38029
            ],
            "body": {
              "id": 20498,
              "nodeType": "Block",
              "src": "5197:105:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20485,
                        "name": "tokenHolder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20476,
                        "src": "5219:11:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20486,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20478,
                        "src": "5232:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 20482,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "5207:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_CheckpointedToken_$20550",
                          "typeString": "contract super CheckpointedToken"
                        }
                      },
                      "id": 20484,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 38029,
                      "src": "5207:11:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 20487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5207:31:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20488,
                  "nodeType": "ExpressionStatement",
                  "src": "5207:31:60"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 20492,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5272:1:60",
                            "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": 20491,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5264:7:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 20490,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5264:7:60",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 20493,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5264:10:60",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20494,
                        "name": "tokenHolder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20476,
                        "src": "5276:11:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20495,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20478,
                        "src": "5289:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20489,
                      "name": "_updateTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20474,
                      "src": "5248:15:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 20496,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5248:47:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20497,
                  "nodeType": "ExpressionStatement",
                  "src": "5248:47:60"
                }
              ]
            },
            "documentation": null,
            "id": 20499,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 20480,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5184:8:60"
            },
            "parameters": {
              "id": 20479,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20476,
                  "mutability": "mutable",
                  "name": "tokenHolder",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20499,
                  "src": "5110:19:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20475,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5110:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20478,
                  "mutability": "mutable",
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20499,
                  "src": "5139:13:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20477,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5139:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5100:58:60"
            },
            "returnParameters": {
              "id": 20481,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5197:0:60"
            },
            "scope": 20550,
            "src": "5086:216:60",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              38085
            ],
            "body": {
              "id": 20523,
              "nodeType": "Block",
              "src": "5419:105:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20510,
                        "name": "tokenHolder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20501,
                        "src": "5441:11:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20511,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20503,
                        "src": "5454:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 20507,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "5429:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_CheckpointedToken_$20550",
                          "typeString": "contract super CheckpointedToken"
                        }
                      },
                      "id": 20509,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 38085,
                      "src": "5429:11:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 20512,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5429:31:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20513,
                  "nodeType": "ExpressionStatement",
                  "src": "5429:31:60"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20515,
                        "name": "tokenHolder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20501,
                        "src": "5486:11:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 20518,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5507:1:60",
                            "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": 20517,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5499:7:60",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 20516,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5499:7:60",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 20519,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5499:10:60",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20520,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20503,
                        "src": "5511:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20514,
                      "name": "_updateTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20474,
                      "src": "5470:15:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 20521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5470:47:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20522,
                  "nodeType": "ExpressionStatement",
                  "src": "5470:47:60"
                }
              ]
            },
            "documentation": null,
            "id": 20524,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_burn",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 20505,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5406:8:60"
            },
            "parameters": {
              "id": 20504,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20501,
                  "mutability": "mutable",
                  "name": "tokenHolder",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20524,
                  "src": "5332:19:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20500,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5332:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20503,
                  "mutability": "mutable",
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20524,
                  "src": "5361:13:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20502,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5361:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5322:58:60"
            },
            "returnParameters": {
              "id": 20506,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5419:0:60"
            },
            "scope": 20550,
            "src": "5308:216:60",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              37974
            ],
            "body": {
              "id": 20548,
              "nodeType": "Block",
              "src": "5674:91:60",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20537,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20526,
                        "src": "5700:4:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20538,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20528,
                        "src": "5706:2:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20539,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20530,
                        "src": "5710:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 20534,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "5684:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_CheckpointedToken_$20550",
                          "typeString": "contract super CheckpointedToken"
                        }
                      },
                      "id": 20536,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 37974,
                      "src": "5684:15:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 20540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5684:32:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20541,
                  "nodeType": "ExpressionStatement",
                  "src": "5684:32:60"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20543,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20526,
                        "src": "5742:4:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20544,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20528,
                        "src": "5748:2:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20545,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20530,
                        "src": "5752:5:60",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20542,
                      "name": "_updateTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20474,
                      "src": "5726:15:60",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 20546,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5726:32:60",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20547,
                  "nodeType": "ExpressionStatement",
                  "src": "5726:32:60"
                }
              ]
            },
            "documentation": null,
            "id": 20549,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_transfer",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 20532,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5661:8:60"
            },
            "parameters": {
              "id": 20531,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20526,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20549,
                  "src": "5558:12:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20525,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5558:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20528,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20549,
                  "src": "5580:10:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20527,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5580:7:60",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20530,
                  "mutability": "mutable",
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 20549,
                  "src": "5600:13:60",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20529,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5600:7:60",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5548:71:60"
            },
            "returnParameters": {
              "id": 20533,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5674:0:60"
            },
            "scope": 20550,
            "src": "5530:235:60",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          }
        ],
        "scope": 20551,
        "src": "227:5540:60"
      }
    ],
    "src": "41:5727:60"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.11+commit.5ef660b1.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-08-12T09:47:18.185Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "allowance(address,address)": {
        "details": "See {IERC20-allowance}."
      },
      "approve(address,uint256)": {
        "details": "See {IERC20-approve}. Requirements: - `spender` cannot be the zero address."
      },
      "balanceOf(address)": {
        "details": "See {IERC20-balanceOf}."
      },
      "balanceOfAt(address,uint256)": {
        "params": {
          "holder": "Holder to query balance for",
          "timestamp": "Timestamp of the balance checkpoint"
        }
      },
      "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`."
      },
      "getHoldersAt(uint256)": {
        "params": {
          "checkpointId": "Checkpoint id at which holder list is to be populated"
        },
        "returns": {
          "_0": "list of holders"
        }
      },
      "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."
      },
      "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`."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "balanceOfAt(address,uint256)": {
        "notice": "Queries the balances of a holder at a specific timestamp"
      },
      "getHoldersAt(uint256)": {
        "notice": "returns an array of holders with non zero balance at a given checkpoint"
      },
      "initialize(string,string)": {
        "notice": "Initialize a new instance storage"
      },
      "totalSupplyAt(uint256)": {
        "notice": "Queries totalSupply at a specific timestamp"
      }
    },
    "version": 1
  }
}