{
  "contractName": "GReputation",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Burn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousBalance",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newBalance",
          "type": "uint256"
        }
      ],
      "name": "DelegateVotesChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "Mint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DELEGATION_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DOMAIN_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "activeBlockchains",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "activeVotes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "balanceOfAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "balances",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "blockchainStates",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "stateHash",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "hashType",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalSupply",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "delegates",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "stateHashBalances",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "totalSupplyHistory",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_id",
          "type": "string"
        },
        {
          "internalType": "bytes32",
          "name": "_hash",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_totalSupply",
          "type": "uint256"
        }
      ],
      "name": "setBlockchainStateHash",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "getVotes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getVotesAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_global",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getVotesAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "totalSupplyLocal",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "totalSupplyAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_id",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getVotesAtBlockchain",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_id",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "totalSupplyAtBlockchain",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_id",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_balance",
          "type": "uint256"
        },
        {
          "internalType": "bytes32[]",
          "name": "_proof",
          "type": "bytes32[]"
        }
      ],
      "name": "proveBalanceOfAtBlockchain",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "delegateOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_delegate",
          "type": "address"
        }
      ],
      "name": "delegateTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "undelegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_delegate",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "_v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "_r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_s",
          "type": "bytes32"
        }
      ],
      "name": "delegateBySig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previousBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"name\":\"DelegateVotesChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DELEGATION_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"activeBlockchains\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"activeVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"balanceOfAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"balances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"blockchainStates\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"hashType\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"}],\"name\":\"delegateBySig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"delegateOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"delegateTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"delegates\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"getVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"getVotesAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_global\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"getVotesAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"getVotesAtBlockchain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_id\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_balance\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"_proof\",\"type\":\"bytes32[]\"}],\"name\":\"proveBalanceOfAtBlockchain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_id\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_totalSupply\",\"type\":\"uint256\"}],\"name\":\"setBlockchainStateHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"stateHashBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"totalSupplyAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_id\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"totalSupplyAtBlockchain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"totalSupplyHistory\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"totalSupplyLocal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"undelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"balanceOf(address)\":{\"details\":\"return the reputation amount of a given owner\",\"params\":{\"_owner\":\"an address of the owner which we want to get his reputation\"}},\"balanceOfAt(address,uint256)\":{\"details\":\"Queries the balance of `_owner` at a specific `_blockNumber`\",\"params\":{\"_blockNumber\":\"The block number when the balance is queried\",\"_owner\":\"The address from which the balance will be retrieved\"},\"returns\":{\"_0\":\"The balance at `_blockNumber`\"}},\"burn(address,uint256)\":{\"params\":{\"_amount\":\"The quantity of reputation to burn\",\"_user\":\"The address that will lose the reputation\"},\"returns\":{\"_0\":\"True if the reputation are burned correctly\"}},\"delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"_delegate\":\"The address to delegate votes to\",\"_expiry\":\"The time at which to expire the signature\",\"_nonce\":\"The contract state required to match the signature\",\"_r\":\"Half of the ECDSA signature pair\",\"_s\":\"Half of the ECDSA signature pair\",\"_v\":\"The recovery byte of the signature\"}},\"delegateOf(address)\":{\"params\":{\"_user\":\"the delegatee\"},\"returns\":{\"_0\":\"the address of the delegate (can be _user  if no delegate or 0x0 if _user doesnt exists)\"}},\"delegateTo(address)\":{\"params\":{\"_delegate\":\"the recipient of votes\"}},\"getVotes(address)\":{\"params\":{\"_user\":\"the user to get active votes for\"},\"returns\":{\"_0\":\"the number of votes\"}},\"getVotesAt(address,bool,uint256)\":{\"params\":{\"_blockNumber\":\"get votes state at specific block\",\"_global\":\"wether to include reputation from other blockchains\",\"_user\":\"the user to get active votes for\"},\"returns\":{\"_0\":\"the number of votes\"}},\"getVotesAt(address,uint256)\":{\"params\":{\"_blockNumber\":\"get votes state at specific block\",\"_user\":\"user to get active votes for\"},\"returns\":{\"_0\":\"the number of votes\"}},\"getVotesAtBlockchain(bytes32,address,uint256)\":{\"params\":{\"_blockNumber\":\"get votes state at specific block\",\"_id\":\"the keccak hash of the blockchain string id\",\"_user\":\"the user to get active votes for\"},\"returns\":{\"_0\":\"the number of votes\"}},\"initialize(address)\":{\"details\":\"initialize\"},\"mint(address,uint256)\":{\"params\":{\"_amount\":\"The quantity of reputation generated\",\"_user\":\"The address that will be assigned the new reputation\"},\"returns\":{\"_0\":\"True if the reputation are generated correctly\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"proveBalanceOfAtBlockchain(string,address,uint256,bytes32[])\":{\"details\":\"\\\"rootState\\\" is a special state that can be supplied once, and actually mints reputation on the current blockchain\",\"params\":{\"_balance\":\"the balance we are prooving\",\"_id\":\"the string id of the blockchain we supply proof for\",\"_proof\":\"array of byte32 with proof data (currently merkle tree path)\",\"_user\":\"the user to prove his balance\"},\"returns\":{\"_0\":\"true if proof is valid\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setBlockchainStateHash(string,bytes32,uint256)\":{\"params\":{\"_hash\":\"the state hash\",\"_id\":\"the string name of the blockchain (will be hashed to produce byte32 id)\",\"_totalSupply\":\"total supply of reputation on the specific blockchain\"}},\"totalSupply()\":{\"details\":\"This function makes it easy to get the total number of reputation\",\"returns\":{\"_0\":\"The total number of reputation\"}},\"totalSupplyAt(uint256)\":{\"params\":{\"_blockNumber\":\"get total supply at specific block\"},\"returns\":{\"_0\":\"the totaly supply\"}},\"totalSupplyAtBlockchain(bytes32,uint256)\":{\"params\":{\"_blockNumber\":\"get total supply at specific block\"},\"returns\":{\"_0\":\"the totaly supply\"}},\"totalSupplyLocal(uint256)\":{\"params\":{\"_blockNumber\":\"get total supply at specific block\"},\"returns\":{\"_0\":\"the totaly supply\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"undelegate()\":{\"details\":\"makes user his own delegate\"}},\"title\":\"GReputation extends Reputation with delegation and cross blockchain merkle states\",\"version\":1},\"userdoc\":{\"events\":{\"DelegateVotesChanged(address,address,uint256,uint256)\":{\"notice\":\"An event thats emitted when a delegate account's vote balance changes\"}},\"kind\":\"user\",\"methods\":{\"DELEGATION_TYPEHASH()\":{\"notice\":\"The EIP-712 typehash for the delegation struct used by the contract\"},\"DOMAIN_TYPEHASH()\":{\"notice\":\"The EIP-712 typehash for the contract's domain\"},\"activeBlockchains(uint256)\":{\"notice\":\"list of blockchains having a statehash for easy iteration\"},\"activeVotes(address,uint256)\":{\"notice\":\"map of user non delegatd + delegated votes to user. this is used for actual voting\"},\"blockchainStates(bytes32,uint256)\":{\"notice\":\"mapping from blockchain id hash to list of states\"},\"burn(address,uint256)\":{\"notice\":\"Burns `_amount` reputation from `_owner`\"},\"delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Delegates votes from signatory to `delegate`\"},\"delegateOf(address)\":{\"notice\":\"returns current delegate of _user\"},\"delegateTo(address)\":{\"notice\":\"delegate votes to another user\"},\"delegates(address)\":{\"notice\":\"keep map of user -> delegate\"},\"getVotes(address)\":{\"notice\":\"returns aggregated active votes in all blockchains and delegated\"},\"getVotesAt(address,bool,uint256)\":{\"notice\":\"get the number of active votes a user holds after delegation (vs the basic balance of reputation he holds)\"},\"getVotesAt(address,uint256)\":{\"notice\":\"returns aggregated active votes in all blockchains and delegated at specific block\"},\"getVotesAtBlockchain(bytes32,address,uint256)\":{\"notice\":\"get the number of active votes a user holds after delegation in specific blockchain\"},\"mint(address,uint256)\":{\"notice\":\"Generates `_amount` reputation that are assigned to `_owner`\"},\"nonces(address)\":{\"notice\":\"A record of states for signing / validating signatures\"},\"proveBalanceOfAtBlockchain(string,address,uint256,bytes32[])\":{\"notice\":\"prove user balance in a specific blockchain state hash\"},\"setBlockchainStateHash(string,bytes32,uint256)\":{\"notice\":\"sets the state hash of a blockchain, can only be called by owner\"},\"stateHashBalances(bytes32,address)\":{\"notice\":\"mapping from stateHash to the user balance can be >0 only after supplying state proof\"},\"totalSupplyAt(uint256)\":{\"notice\":\"returns total supply in all blockchain aggregated\"},\"totalSupplyAtBlockchain(bytes32,uint256)\":{\"notice\":\"returns total supply in a specific blockchain\"},\"totalSupplyLocal(uint256)\":{\"notice\":\"returns total supply in current blockchain (super.balanceOfAt)\"},\"undelegate()\":{\"notice\":\"cancel user delegation\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/governance/GReputation.sol\":\"GReputation\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/Interfaces.sol\":{\"keccak256\":\"0xe501727b0e5e15fe639129ab4b1abc59a14ebd3ddd05bb7056ac4fc26a8f3ee7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90d8797740cfd3933ae849f3144e30f9133a55b26634b3efefa8206cd91f62d8\",\"dweb:/ipfs/QmYLeetoyiPej9acnGzjLLwgVnEg4d2Eg1Xb4k3A1mJqj6\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/governance/GReputation.sol\":{\"keccak256\":\"0xf8d07376b04e640ca5231cde096ab24c331b2d390a91bea1fc56bc422501bce6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce3edfcbcb7fc8ae1455f95c4fe1ca72ad40a317e7c837f584d3cf49c8cdc1b5\",\"dweb:/ipfs/QmWdF5ccZLb7oCoA4XLXWfaUEE1oYEEFEnFGLfmySbcm4Z\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/governance/Reputation.sol\":{\"keccak256\":\"0x88ff030c7d958aeeb17f1f140108becba92e4c9582193a2b778bf68d3a162486\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://1266112062d6447c1e24cbfefba471194ef1e177e1ca0b5e935ed96c45b568bf\",\"dweb:/ipfs/QmbJ5pNb3uXDvftUWZmCgBLi6id81BdjQCcso1kVqZ5nvP\"]},\"@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol\":{\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://062688aac76e27ab50157a9d645700cf92e3c0d51d3d860be1d2e1a0c04a87d0\",\"dweb:/ipfs/QmfXxppWAiSTeH8YNn2EtMPDgzrLeJ5rjRq8knEbje88mX\"]},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xe422bf8bc61fe71acb27de4631400cdbb9b532df4de4f255eab093ac356f9745\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c2e5ed663c9df8fd44b624cfef92a703803cc72cf356c96e69a6e88c5ce082d\",\"dweb:/ipfs/QmdtPLYhopn3L14o6TCJkwH28o91do8JriAxpFYt67NWGB\"]},\"@openzeppelin/contracts-upgradeable/cryptography/MerkleProofUpgradeable.sol\":{\"keccak256\":\"0x4806316f4167dd87deca0a884bc0e6ed41d9e4926ce10862fead08aa42ebe8da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b862973de986634686a1b026ed3ee7418736efb6e0aa8ba22886400065201ef\",\"dweb:/ipfs/QmUPSZrxKKw6Kj9vW1DS1ZM7AuXCV6JYxPPkgbp9XyDEEb\"]},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"keccak256\":\"0xe9ecc18d06bcc5aa48c40a98333540248b6c1c18ecb6262329c06d3f0cbb45ae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8a81bcbe4f867a4eaf7ec375508a9901ea7517b9854c9a542c242050beda5127\",\"dweb:/ipfs/QmS499VRDhAgMg1pK96PiyRpP3gJZzzMcoNBbe8AV3JNw3\"]},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"keccak256\":\"0xae7044b7c89ed74327b0979ae6f317c65d87b8d17a42d0c62d698d77d5de5511\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d676c978d8ecee5c4510f045b747d94f3a1381e39feb870d2675d5b6d45a371b\",\"dweb:/ipfs/QmUAokuHWPVAf14QkhPtSdYFyNa8HVje9CBEzwCcxH3xkP\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b506123e9806100206000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80638d22ea2a1161011a578063a265ba46116100ad578063cbf1304d1161007c578063cbf1304d14610835578063e7a324dc14610861578063f0e18a4314610869578063f2a035e2146108b2578063f2fde38b146108cf57610206565b8063a265ba461461076e578063ac637c7a146107a2578063c3cda520146107c8578063c4d66de81461080f57610206565b8063981b24d0116100e9578063981b24d0146105c05780639ab24eb0146105dd5780639adf01f7146106035780639dc29fac1461074257610206565b80638d22ea2a1461055e5780638da5cb5b1461058457806392ab89bb1461058c5780639324bffa1461059457610206565b8063313ce5671161019d5780636641d9a01161016c5780636641d9a0146104d05780636c087d90146104ed57806370a082311461050a578063715018a6146105305780637ecebe001461053857610206565b8063313ce5671461040457806340c10f19146104225780634ee2cd7e14610462578063587cde1e1461048e57610206565b806318a1851f116101d957806318a1851f1461037257806320606b70146103a457806322ea1d80146103ac5780632337f7b6146103d857610206565b806305bc9e841461020b57806306fdde031461024057806317aeda02146102bd57806318160ddd1461036a575b600080fd5b61022e6004803603604081101561022157600080fd5b50803590602001356108f5565b60408051918252519081900360200190f35b61024861099b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028257818101518382015260200161026a565b50505050905090810190601f1680156102af5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610368600480360360608110156102d357600080fd5b8101906020810181356401000000008111156102ee57600080fd5b82018360208201111561030057600080fd5b8035906020019184600183028401116401000000008311171561032257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505050602001356109c2565b005b61022e610bec565b61022e6004803603606081101561038857600080fd5b508035906001600160a01b036020820135169060400135610bfc565b61022e610cce565b61022e600480360360408110156103c257600080fd5b50803590602001356001600160a01b0316610cf2565b61022e600480360360408110156103ee57600080fd5b506001600160a01b038135169060200135610d0f565b61040c610d3d565b6040805160ff9092168252519081900360200190f35b61044e6004803603604081101561043857600080fd5b506001600160a01b038135169060200135610d46565b604080519115158252519081900360200190f35b61022e6004803603604081101561047857600080fd5b506001600160a01b038135169060200135610db4565b6104b4600480360360208110156104a457600080fd5b50356001600160a01b0316610e43565b604080516001600160a01b039092168252519081900360200190f35b61022e600480360360208110156104e657600080fd5b5035610e5e565b61022e6004803603602081101561050357600080fd5b5035610e7c565b61022e6004803603602081101561052057600080fd5b50356001600160a01b0316610e89565b610368610e9d565b61022e6004803603602081101561054e57600080fd5b50356001600160a01b0316610f3f565b6104b46004803603602081101561057457600080fd5b50356001600160a01b0316610f51565b6104b4610f6f565b610368610f7e565b61022e600480360360408110156105aa57600080fd5b506001600160a01b038135169060200135610f8a565b61022e600480360360208110156105d657600080fd5b5035610f98565b61022e600480360360208110156105f357600080fd5b50356001600160a01b0316610fef565b61044e6004803603608081101561061957600080fd5b81019060208101813564010000000081111561063457600080fd5b82018360208201111561064657600080fd5b8035906020019184600183028401116401000000008311171561066857600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516956020860135959194509250606081019150604001356401000000008111156106d057600080fd5b8201836020820111156106e257600080fd5b8035906020019184602083028401116401000000008311171561070457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610ffd945050505050565b61044e6004803603604081101561075857600080fd5b506001600160a01b0381351690602001356111ee565b61022e6004803603606081101561078457600080fd5b506001600160a01b0381351690602081013515159060400135611252565b610368600480360360208110156107b857600080fd5b50356001600160a01b03166112c4565b610368600480360360c08110156107de57600080fd5b506001600160a01b038135169060208101359060408101359060ff6060820135169060808101359060a001356112d1565b6103686004803603602081101561082557600080fd5b50356001600160a01b031661156c565b61022e6004803603604081101561084b57600080fd5b506001600160a01b03813516906020013561162a565b61022e611643565b61088c6004803603604081101561087f57600080fd5b5080359060200135611667565b604080519485526020850193909352838301919091526060830152519081900360800190f35b61022e600480360360208110156108c857600080fd5b50356116aa565b610368600480360360208110156108e557600080fd5b50356001600160a01b03166116b5565b60008281526069602052604081208054829061091657600092505050610995565b508054600019015b60008112610958578382828154811061093357fe5b9060005260206000209060090201600301541161094f57610958565b6000190161091e565b600081121561096c57600092505050610995565b600082828154811061097a57fe5b90600052602060002090600902019050806002015493505050505b92915050565b6040518060400160405280600b81526020016a23a932b83aba30ba34b7b760a91b81525081565b6109ca6117ae565b6033546001600160a01b03908116911614610a1a576040805162461bcd60e51b81526020600482018190526024820152600080516020612367833981519152604482015290519081900360640190fd5b8251602080850191909120604080518082019091526009815268726f6f74537461746560b81b9201919091527f0df2f1ec68f7ac2e4205051c96e8cfd7b54c89c139839c13d3d59548ae1488a18114801580610a7c5750610a7a436117b2565b155b610acd576040805162461bcd60e51b815260206004820152601960248201527f726f6f74537461746520616c7265616479206372656174656400000000000000604482015290519081900360640190fd5b60005b81158015610adf5750606b5481105b15610b105782606b8281548110610af257fe5b90600052602060002001541415610b0857610b10565b600101610ad0565b81158015610b1f5750606b5481145b15610b5a57606b80546001810182556000919091527fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b4018390555b8115610b6b57610b6b606785611803565b610b736121e1565b858152604080820186815243606084019081526000878152606960209081529381208054600181810183559183529185902086516009909302019182559385015193810193909355905160028301555160038201556080820151829190610be09060048301906005612218565b50505050505050505050565b6000610bf743610f98565b905090565b6000838152606960205260408120805480610c1c57600092505050610cc7565b6000826001830381548110610c2d57fe5b906000526020600020906009020190506001820391505b60008212610c895784816003015411610c5c57610c89565b826001830381548110610c6b57fe5b90600052602060002090600902019050818060019003925050610c44565b6000821215610c9e5760009350505050610cc7565b546000908152606a602090815260408083206001600160a01b0389168452909152902054925050505b9392505050565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b606a60209081526000928352604080842090915290825290205481565b606d6020528160005260406000208181548110610d2857fe5b90600052602060002001600091509150505481565b60655460ff1681565b6000610d506117ae565b6033546001600160a01b03908116911614610da0576040805162461bcd60e51b81526020600482018190526024820152600080516020612367833981519152604482015290519081900360640190fd5b610daa8383611907565b5060019392505050565b6001600160a01b0382166000908152606660205260408120541580610e0d57506001600160a01b03831660009081526066602052604081208054849290610df757fe5b90600052602060002001546001600160801b0316115b15610e1a57506000610995565b6001600160a01b0383166000908152606660205260409020610e3c9083611997565b9050610995565b606c602052600090815260409020546001600160a01b031681565b60678181548110610e6b57fe5b600091825260209091200154905081565b606b8181548110610e6b57fe5b6000610e958243610db4565b90505b919050565b610ea56117ae565b6033546001600160a01b03908116911614610ef5576040805162461bcd60e51b81526020600482018190526024820152600080516020612367833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b60686020526000908152604090205481565b6001600160a01b039081166000908152606c60205260409020541690565b6033546001600160a01b031690565b610f883333611a97565b565b6000610cc783600184611252565b600080610fa4836117b2565b905060005b606b54811015610fe857610fde610fd7606b8381548110610fc657fe5b9060005260206000200154866108f5565b8390611be1565b9150600101610fa9565b5092915050565b6000610e9582600143611252565b8351602080860191909120600081815260699092526040822054611068576040805162461bcd60e51b815260206004820152601c60248201527f6e6f20737461746520666f756e6420666f7220676976656e205f696400000000604482015290519081900360640190fd5b60008181526069602052604081208054600019810190811061108657fe5b60009182526020808320600990920290910154808352606a825260408084206001600160a01b038b1685529092529120549091501561110c576040805162461bcd60e51b815260206004820152601860248201527f73746174654861736820616c72656164792070726f7665640000000000000000604482015290519081900360640190fd5b600061111a87878488611c3b565b91505080611166576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b21036b2b935b63290383937b7b360611b604482015290519081900360640190fd5b604080518082019091526009815268726f6f74537461746560b81b6020909101527f0df2f1ec68f7ac2e4205051c96e8cfd7b54c89c139839c13d3d59548ae1488a18314156111bb576111b98787611907565b505b506000908152606a602090815260408083206001600160a01b038916845290915290208490555060019050949350505050565b60006111f86117ae565b6033546001600160a01b03908116911614611248576040805162461bcd60e51b81526020600482018190526024820152600080516020612367833981519152604482015290519081900360640190fd5b610daa8383611c86565b6001600160a01b0383166000908152606d6020526040812081906112769084611997565b905083156112bc5760005b606b548110156112ba576112b0610fd7606b838154811061129e57fe5b90600052602060002001548887610bfc565b9150600101611281565b505b949350505050565b6112ce3382611a97565b50565b60408051808201909152600b81526a23a932b83aba30ba34b7b760a91b60209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f6d6957b3a4022b7a24cdd877ade4bdbb5b5a4e21c5304908c958d003c049de6c611340611d15565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a0830182528051908401207fff41620983935eb4d4a3c7384a066ca8c1d10cef9a5eca9eb97ca735cd14a75560c08401526001600160a01b038b1660e084015261010083018a90526101208084018a9052825180850390910181526101408401835280519085012061190160f01b6101608501526101628401829052610182808501829052835180860390910181526101a285018085528151918701919091206000918290526101c2860180865281905260ff8b166101e287015261020286018a90526102228601899052935192965090949293909260019261024280840193601f198301929081900390910190855afa158015611473573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166114c55760405162461bcd60e51b815260040180806020018281038252602d815260200180612387602d913960400191505060405180910390fd5b6001600160a01b038116600090815260686020526040902080546001810190915589146115235760405162461bcd60e51b815260040180806020018281038252602981526020018061228a6029913960400191505060405180910390fd5b874211156115625760405162461bcd60e51b815260040180806020018281038252602d8152602001806122d9602d913960400191505060405180910390fd5b610be0818b611a97565b600054610100900460ff16806115855750611585611d19565b80611593575060005460ff16155b6115ce5760405162461bcd60e51b815260040180806020018281038252602e815260200180612339602e913960400191505060405180910390fd5b600054610100900460ff161580156115f9576000805460ff1961ff0019909116610100171660011790555b6065805460ff1916905561160b611d1f565b611614826116b5565b8015611626576000805461ff00191690555b5050565b60666020528160005260406000208181548110610d2857fe5b7fff41620983935eb4d4a3c7384a066ca8c1d10cef9a5eca9eb97ca735cd14a75581565b6069602052816000526040600020818154811061168057fe5b60009182526020909120600990910201805460018201546002830154600390930154919450925084565b6000610e95826117b2565b6116bd6117ae565b6033546001600160a01b0390811691161461170d576040805162461bcd60e51b81526020600482018190526024820152600080516020612367833981519152604482015290519081900360640190fd5b6001600160a01b0381166117525760405162461bcd60e51b81526004018080602001828103825260268152602001806122b36026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b60675460009015806117e457508160676000815481106117ce57fe5b90600052602060002001546001600160801b0316115b156117f157506000610e98565b6117fc606783611997565b9050610e98565b80816001600160801b031614611856576040805162461bcd60e51b815260206004820152601360248201527272657075746174696f6e206f766572666c6f7760681b604482015290519081900360640190fd5b815415806118895750815443908390600019810190811061187357fe5b90600052602060002001546001600160801b0316105b156118b75781546001810183556000838152602090206001600160801b034316608084901b17910155611626565b608081901b6001600160801b03836001858054905003815481106118d757fe5b90600052602060002001541617826001848054905003815481106118f757fe5b6000918252602090912001555050565b60006119138383611e18565b506001600160a01b038084166000908152606c6020526040902054168061193a578361193c565b805b6001600160a01b038581166000908152606c6020526040812080546001600160a01b0319169284169290921790915590915061197782610fef565b905061198e8286836119898189611be1565b611f44565b50919392505050565b8154600090806119ab576000915050610995565b60008460018303815481106119bc57fe5b90600052602060002001549050806001600160801b031684106119e55760801c91506109959050565b846000815481106119f257fe5b90600052602060002001546001600160801b0316841015611a1857600092505050610995565b600060001983015b81811115611a70576000600260018385010104905086888281548110611a4257fe5b90600052602060002001546001600160801b031611611a6357809250611a6a565b6001810391505b50611a20565b6080878381548110611a7e57fe5b9060005260206000200154901c94505050505092915050565b6001600160a01b038116611adc5760405162461bcd60e51b81526004018080602001828103825260338152602001806123066033913960400191505060405180910390fd5b6001600160a01b038083166000908152606c60205260409020548116908216811415611b4f576040805162461bcd60e51b815260206004820152601f60248201527f616c72656164792064656c65676174696e6720746f2064656c656761746f7200604482015290519081900360640190fd5b6001600160a01b038381166000908152606c6020526040812080546001600160a01b03191692851692909217909155611b8784610e89565b90506001600160a01b03821615611bba576000611ba683600043611252565b9050611bb88386836119898187611fbf565b505b6000611bc884600043611252565b9050611bda8486836119898187611be1565b5050505050565b600082820183811015610cc7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b038616602080830191909152818301869052825180830384018152606090920190925280519101206000611c7b838584612001565b905094509492505050565b600080611c9384846120aa565b6001600160a01b038086166000908152606c60205260409020549192501680611cbc5784611cbe565b805b6001600160a01b038681166000908152606c6020526040812080546001600160a01b03191692841692909217909155909150611cf982610fef565b9050611d0b8287836119898188611fbf565b5090949350505050565b4690565b303b1590565b600054610100900460ff1680611d385750611d38611d19565b80611d46575060005460ff16155b611d815760405162461bcd60e51b815260040180806020018281038252602e815260200180612339602e913960400191505060405180910390fd5b600054610100900460ff16158015611dac576000805460ff1961ff0019909116610100171660011790555b6000611db66117ae565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156112ce576000805461ff001916905550565b600080611e23610bec565b9050808382011015611e74576040805162461bcd60e51b8152602060048201526015602482015274746f74616c20737570706c79206f766572666c6f7760581b604482015290519081900360640190fd5b6000611e7f85610e89565b9050808482011015611ecb576040805162461bcd60e51b815260206004820152601060248201526f62616c616e6365206f766572666c6f7760801b604482015290519081900360640190fd5b611ed86067858401611803565b6001600160a01b0385166000908152606660205260409020611efc90828601611803565b6040805185815290516001600160a01b038716917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885919081900360200190a250919392505050565b6001600160a01b0384166000908152606d60205260409020611f669082611803565b826001600160a01b0316846001600160a01b03167f8553411b8bbb348336351063649aa1f4fa74c4935f5c4386469a017df33a1f668484604051808381526020018281526020019250505060405180910390a350505050565b6000610cc783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061214a565b600081815b855181101561209f57600086828151811061201d57fe5b602002602001015190508083116120645782816040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250612096565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b50600101612006565b509092149392505050565b6000806120b5610bec565b90508260006120c386610e89565b9050818110156120d1578091505b6120de6067838503611803565b6001600160a01b038616600090815260666020526040902061210290838303611803565b6040805183815290516001600160a01b038816917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a250949350505050565b600081848411156121d95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561219e578181015183820152602001612186565b50505050905090810190601f1680156121cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6040518060a0016040528060008019168152602001600081526020016000815260200160008152602001612213612256565b905290565b8260058101928215612246579160200282015b8281111561224657825182559160200191906001019061222b565b50612252929150612274565b5090565b6040518060a001604052806005906020820280368337509192915050565b5b80821115612252576000815560010161227556fe4752657075746174696f6e3a3a64656c656761746542795369673a20696e76616c6964206e6f6e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734752657075746174696f6e3a3a64656c656761746542795369673a207369676e617475726520657870697265644752657075746174696f6e3a3a64656c65676174652063616e27742064656c6567617420746f206e756c6c2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724752657075746174696f6e3a3a64656c656761746542795369673a20696e76616c6964207369676e6174757265a2646970667358221220f4bfb850d751c8a3e1c7c32caaaabc436020f45d432381068b3e8110ee5662ab64736f6c634300060c0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102065760003560e01c80638d22ea2a1161011a578063a265ba46116100ad578063cbf1304d1161007c578063cbf1304d14610835578063e7a324dc14610861578063f0e18a4314610869578063f2a035e2146108b2578063f2fde38b146108cf57610206565b8063a265ba461461076e578063ac637c7a146107a2578063c3cda520146107c8578063c4d66de81461080f57610206565b8063981b24d0116100e9578063981b24d0146105c05780639ab24eb0146105dd5780639adf01f7146106035780639dc29fac1461074257610206565b80638d22ea2a1461055e5780638da5cb5b1461058457806392ab89bb1461058c5780639324bffa1461059457610206565b8063313ce5671161019d5780636641d9a01161016c5780636641d9a0146104d05780636c087d90146104ed57806370a082311461050a578063715018a6146105305780637ecebe001461053857610206565b8063313ce5671461040457806340c10f19146104225780634ee2cd7e14610462578063587cde1e1461048e57610206565b806318a1851f116101d957806318a1851f1461037257806320606b70146103a457806322ea1d80146103ac5780632337f7b6146103d857610206565b806305bc9e841461020b57806306fdde031461024057806317aeda02146102bd57806318160ddd1461036a575b600080fd5b61022e6004803603604081101561022157600080fd5b50803590602001356108f5565b60408051918252519081900360200190f35b61024861099b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028257818101518382015260200161026a565b50505050905090810190601f1680156102af5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610368600480360360608110156102d357600080fd5b8101906020810181356401000000008111156102ee57600080fd5b82018360208201111561030057600080fd5b8035906020019184600183028401116401000000008311171561032257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505050602001356109c2565b005b61022e610bec565b61022e6004803603606081101561038857600080fd5b508035906001600160a01b036020820135169060400135610bfc565b61022e610cce565b61022e600480360360408110156103c257600080fd5b50803590602001356001600160a01b0316610cf2565b61022e600480360360408110156103ee57600080fd5b506001600160a01b038135169060200135610d0f565b61040c610d3d565b6040805160ff9092168252519081900360200190f35b61044e6004803603604081101561043857600080fd5b506001600160a01b038135169060200135610d46565b604080519115158252519081900360200190f35b61022e6004803603604081101561047857600080fd5b506001600160a01b038135169060200135610db4565b6104b4600480360360208110156104a457600080fd5b50356001600160a01b0316610e43565b604080516001600160a01b039092168252519081900360200190f35b61022e600480360360208110156104e657600080fd5b5035610e5e565b61022e6004803603602081101561050357600080fd5b5035610e7c565b61022e6004803603602081101561052057600080fd5b50356001600160a01b0316610e89565b610368610e9d565b61022e6004803603602081101561054e57600080fd5b50356001600160a01b0316610f3f565b6104b46004803603602081101561057457600080fd5b50356001600160a01b0316610f51565b6104b4610f6f565b610368610f7e565b61022e600480360360408110156105aa57600080fd5b506001600160a01b038135169060200135610f8a565b61022e600480360360208110156105d657600080fd5b5035610f98565b61022e600480360360208110156105f357600080fd5b50356001600160a01b0316610fef565b61044e6004803603608081101561061957600080fd5b81019060208101813564010000000081111561063457600080fd5b82018360208201111561064657600080fd5b8035906020019184600183028401116401000000008311171561066857600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516956020860135959194509250606081019150604001356401000000008111156106d057600080fd5b8201836020820111156106e257600080fd5b8035906020019184602083028401116401000000008311171561070457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610ffd945050505050565b61044e6004803603604081101561075857600080fd5b506001600160a01b0381351690602001356111ee565b61022e6004803603606081101561078457600080fd5b506001600160a01b0381351690602081013515159060400135611252565b610368600480360360208110156107b857600080fd5b50356001600160a01b03166112c4565b610368600480360360c08110156107de57600080fd5b506001600160a01b038135169060208101359060408101359060ff6060820135169060808101359060a001356112d1565b6103686004803603602081101561082557600080fd5b50356001600160a01b031661156c565b61022e6004803603604081101561084b57600080fd5b506001600160a01b03813516906020013561162a565b61022e611643565b61088c6004803603604081101561087f57600080fd5b5080359060200135611667565b604080519485526020850193909352838301919091526060830152519081900360800190f35b61022e600480360360208110156108c857600080fd5b50356116aa565b610368600480360360208110156108e557600080fd5b50356001600160a01b03166116b5565b60008281526069602052604081208054829061091657600092505050610995565b508054600019015b60008112610958578382828154811061093357fe5b9060005260206000209060090201600301541161094f57610958565b6000190161091e565b600081121561096c57600092505050610995565b600082828154811061097a57fe5b90600052602060002090600902019050806002015493505050505b92915050565b6040518060400160405280600b81526020016a23a932b83aba30ba34b7b760a91b81525081565b6109ca6117ae565b6033546001600160a01b03908116911614610a1a576040805162461bcd60e51b81526020600482018190526024820152600080516020612367833981519152604482015290519081900360640190fd5b8251602080850191909120604080518082019091526009815268726f6f74537461746560b81b9201919091527f0df2f1ec68f7ac2e4205051c96e8cfd7b54c89c139839c13d3d59548ae1488a18114801580610a7c5750610a7a436117b2565b155b610acd576040805162461bcd60e51b815260206004820152601960248201527f726f6f74537461746520616c7265616479206372656174656400000000000000604482015290519081900360640190fd5b60005b81158015610adf5750606b5481105b15610b105782606b8281548110610af257fe5b90600052602060002001541415610b0857610b10565b600101610ad0565b81158015610b1f5750606b5481145b15610b5a57606b80546001810182556000919091527fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b4018390555b8115610b6b57610b6b606785611803565b610b736121e1565b858152604080820186815243606084019081526000878152606960209081529381208054600181810183559183529185902086516009909302019182559385015193810193909355905160028301555160038201556080820151829190610be09060048301906005612218565b50505050505050505050565b6000610bf743610f98565b905090565b6000838152606960205260408120805480610c1c57600092505050610cc7565b6000826001830381548110610c2d57fe5b906000526020600020906009020190506001820391505b60008212610c895784816003015411610c5c57610c89565b826001830381548110610c6b57fe5b90600052602060002090600902019050818060019003925050610c44565b6000821215610c9e5760009350505050610cc7565b546000908152606a602090815260408083206001600160a01b0389168452909152902054925050505b9392505050565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b606a60209081526000928352604080842090915290825290205481565b606d6020528160005260406000208181548110610d2857fe5b90600052602060002001600091509150505481565b60655460ff1681565b6000610d506117ae565b6033546001600160a01b03908116911614610da0576040805162461bcd60e51b81526020600482018190526024820152600080516020612367833981519152604482015290519081900360640190fd5b610daa8383611907565b5060019392505050565b6001600160a01b0382166000908152606660205260408120541580610e0d57506001600160a01b03831660009081526066602052604081208054849290610df757fe5b90600052602060002001546001600160801b0316115b15610e1a57506000610995565b6001600160a01b0383166000908152606660205260409020610e3c9083611997565b9050610995565b606c602052600090815260409020546001600160a01b031681565b60678181548110610e6b57fe5b600091825260209091200154905081565b606b8181548110610e6b57fe5b6000610e958243610db4565b90505b919050565b610ea56117ae565b6033546001600160a01b03908116911614610ef5576040805162461bcd60e51b81526020600482018190526024820152600080516020612367833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b60686020526000908152604090205481565b6001600160a01b039081166000908152606c60205260409020541690565b6033546001600160a01b031690565b610f883333611a97565b565b6000610cc783600184611252565b600080610fa4836117b2565b905060005b606b54811015610fe857610fde610fd7606b8381548110610fc657fe5b9060005260206000200154866108f5565b8390611be1565b9150600101610fa9565b5092915050565b6000610e9582600143611252565b8351602080860191909120600081815260699092526040822054611068576040805162461bcd60e51b815260206004820152601c60248201527f6e6f20737461746520666f756e6420666f7220676976656e205f696400000000604482015290519081900360640190fd5b60008181526069602052604081208054600019810190811061108657fe5b60009182526020808320600990920290910154808352606a825260408084206001600160a01b038b1685529092529120549091501561110c576040805162461bcd60e51b815260206004820152601860248201527f73746174654861736820616c72656164792070726f7665640000000000000000604482015290519081900360640190fd5b600061111a87878488611c3b565b91505080611166576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b21036b2b935b63290383937b7b360611b604482015290519081900360640190fd5b604080518082019091526009815268726f6f74537461746560b81b6020909101527f0df2f1ec68f7ac2e4205051c96e8cfd7b54c89c139839c13d3d59548ae1488a18314156111bb576111b98787611907565b505b506000908152606a602090815260408083206001600160a01b038916845290915290208490555060019050949350505050565b60006111f86117ae565b6033546001600160a01b03908116911614611248576040805162461bcd60e51b81526020600482018190526024820152600080516020612367833981519152604482015290519081900360640190fd5b610daa8383611c86565b6001600160a01b0383166000908152606d6020526040812081906112769084611997565b905083156112bc5760005b606b548110156112ba576112b0610fd7606b838154811061129e57fe5b90600052602060002001548887610bfc565b9150600101611281565b505b949350505050565b6112ce3382611a97565b50565b60408051808201909152600b81526a23a932b83aba30ba34b7b760a91b60209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f6d6957b3a4022b7a24cdd877ade4bdbb5b5a4e21c5304908c958d003c049de6c611340611d15565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a0830182528051908401207fff41620983935eb4d4a3c7384a066ca8c1d10cef9a5eca9eb97ca735cd14a75560c08401526001600160a01b038b1660e084015261010083018a90526101208084018a9052825180850390910181526101408401835280519085012061190160f01b6101608501526101628401829052610182808501829052835180860390910181526101a285018085528151918701919091206000918290526101c2860180865281905260ff8b166101e287015261020286018a90526102228601899052935192965090949293909260019261024280840193601f198301929081900390910190855afa158015611473573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166114c55760405162461bcd60e51b815260040180806020018281038252602d815260200180612387602d913960400191505060405180910390fd5b6001600160a01b038116600090815260686020526040902080546001810190915589146115235760405162461bcd60e51b815260040180806020018281038252602981526020018061228a6029913960400191505060405180910390fd5b874211156115625760405162461bcd60e51b815260040180806020018281038252602d8152602001806122d9602d913960400191505060405180910390fd5b610be0818b611a97565b600054610100900460ff16806115855750611585611d19565b80611593575060005460ff16155b6115ce5760405162461bcd60e51b815260040180806020018281038252602e815260200180612339602e913960400191505060405180910390fd5b600054610100900460ff161580156115f9576000805460ff1961ff0019909116610100171660011790555b6065805460ff1916905561160b611d1f565b611614826116b5565b8015611626576000805461ff00191690555b5050565b60666020528160005260406000208181548110610d2857fe5b7fff41620983935eb4d4a3c7384a066ca8c1d10cef9a5eca9eb97ca735cd14a75581565b6069602052816000526040600020818154811061168057fe5b60009182526020909120600990910201805460018201546002830154600390930154919450925084565b6000610e95826117b2565b6116bd6117ae565b6033546001600160a01b0390811691161461170d576040805162461bcd60e51b81526020600482018190526024820152600080516020612367833981519152604482015290519081900360640190fd5b6001600160a01b0381166117525760405162461bcd60e51b81526004018080602001828103825260268152602001806122b36026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b60675460009015806117e457508160676000815481106117ce57fe5b90600052602060002001546001600160801b0316115b156117f157506000610e98565b6117fc606783611997565b9050610e98565b80816001600160801b031614611856576040805162461bcd60e51b815260206004820152601360248201527272657075746174696f6e206f766572666c6f7760681b604482015290519081900360640190fd5b815415806118895750815443908390600019810190811061187357fe5b90600052602060002001546001600160801b0316105b156118b75781546001810183556000838152602090206001600160801b034316608084901b17910155611626565b608081901b6001600160801b03836001858054905003815481106118d757fe5b90600052602060002001541617826001848054905003815481106118f757fe5b6000918252602090912001555050565b60006119138383611e18565b506001600160a01b038084166000908152606c6020526040902054168061193a578361193c565b805b6001600160a01b038581166000908152606c6020526040812080546001600160a01b0319169284169290921790915590915061197782610fef565b905061198e8286836119898189611be1565b611f44565b50919392505050565b8154600090806119ab576000915050610995565b60008460018303815481106119bc57fe5b90600052602060002001549050806001600160801b031684106119e55760801c91506109959050565b846000815481106119f257fe5b90600052602060002001546001600160801b0316841015611a1857600092505050610995565b600060001983015b81811115611a70576000600260018385010104905086888281548110611a4257fe5b90600052602060002001546001600160801b031611611a6357809250611a6a565b6001810391505b50611a20565b6080878381548110611a7e57fe5b9060005260206000200154901c94505050505092915050565b6001600160a01b038116611adc5760405162461bcd60e51b81526004018080602001828103825260338152602001806123066033913960400191505060405180910390fd5b6001600160a01b038083166000908152606c60205260409020548116908216811415611b4f576040805162461bcd60e51b815260206004820152601f60248201527f616c72656164792064656c65676174696e6720746f2064656c656761746f7200604482015290519081900360640190fd5b6001600160a01b038381166000908152606c6020526040812080546001600160a01b03191692851692909217909155611b8784610e89565b90506001600160a01b03821615611bba576000611ba683600043611252565b9050611bb88386836119898187611fbf565b505b6000611bc884600043611252565b9050611bda8486836119898187611be1565b5050505050565b600082820183811015610cc7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b038616602080830191909152818301869052825180830384018152606090920190925280519101206000611c7b838584612001565b905094509492505050565b600080611c9384846120aa565b6001600160a01b038086166000908152606c60205260409020549192501680611cbc5784611cbe565b805b6001600160a01b038681166000908152606c6020526040812080546001600160a01b03191692841692909217909155909150611cf982610fef565b9050611d0b8287836119898188611fbf565b5090949350505050565b4690565b303b1590565b600054610100900460ff1680611d385750611d38611d19565b80611d46575060005460ff16155b611d815760405162461bcd60e51b815260040180806020018281038252602e815260200180612339602e913960400191505060405180910390fd5b600054610100900460ff16158015611dac576000805460ff1961ff0019909116610100171660011790555b6000611db66117ae565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156112ce576000805461ff001916905550565b600080611e23610bec565b9050808382011015611e74576040805162461bcd60e51b8152602060048201526015602482015274746f74616c20737570706c79206f766572666c6f7760581b604482015290519081900360640190fd5b6000611e7f85610e89565b9050808482011015611ecb576040805162461bcd60e51b815260206004820152601060248201526f62616c616e6365206f766572666c6f7760801b604482015290519081900360640190fd5b611ed86067858401611803565b6001600160a01b0385166000908152606660205260409020611efc90828601611803565b6040805185815290516001600160a01b038716917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885919081900360200190a250919392505050565b6001600160a01b0384166000908152606d60205260409020611f669082611803565b826001600160a01b0316846001600160a01b03167f8553411b8bbb348336351063649aa1f4fa74c4935f5c4386469a017df33a1f668484604051808381526020018281526020019250505060405180910390a350505050565b6000610cc783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061214a565b600081815b855181101561209f57600086828151811061201d57fe5b602002602001015190508083116120645782816040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250612096565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b50600101612006565b509092149392505050565b6000806120b5610bec565b90508260006120c386610e89565b9050818110156120d1578091505b6120de6067838503611803565b6001600160a01b038616600090815260666020526040902061210290838303611803565b6040805183815290516001600160a01b038816917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a250949350505050565b600081848411156121d95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561219e578181015183820152602001612186565b50505050905090810190601f1680156121cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6040518060a0016040528060008019168152602001600081526020016000815260200160008152602001612213612256565b905290565b8260058101928215612246579160200282015b8281111561224657825182559160200191906001019061222b565b50612252929150612274565b5090565b6040518060a001604052806005906020820280368337509192915050565b5b80821115612252576000815560010161227556fe4752657075746174696f6e3a3a64656c656761746542795369673a20696e76616c6964206e6f6e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734752657075746174696f6e3a3a64656c656761746542795369673a207369676e617475726520657870697265644752657075746174696f6e3a3a64656c65676174652063616e27742064656c6567617420746f206e756c6c2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724752657075746174696f6e3a3a64656c656761746542795369673a20696e76616c6964207369676e6174757265a2646970667358221220f4bfb850d751c8a3e1c7c32caaaabc436020f45d432381068b3e8110ee5662ab64736f6c634300060c0033",
  "immutableReferences": {},
  "sourceMap": "376:13777:4:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "376:13777:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8086:442;;;;;;;;;;;;;;;;-1:-1:-1;8086:442:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;455:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3932:900;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3932:900:4;;-1:-1:-1;;3932:900:4;;;-1:-1:-1;;;3932:900:4;;;;:::i;:::-;;3863:95:5;;;:::i;7427:499:4:-;;;;;;;;;;;;;;;;-1:-1:-1;7427:499:4;;;-1:-1:-1;;;;;7427:499:4;;;;;;;;;;:::i;562:131::-;;;:::i;1682:72::-;;;;;;;;;;;;;;;;-1:-1:-1;1682:72:4;;;;;;-1:-1:-1;;;;;1682:72:4;;:::i;2053:48::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2053:48:4;;;;;;;;:::i;666:21:5:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1986:129;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1986:129:5;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4565:360;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4565:360:5;;;;;;;;:::i;1909:44:4:-;;;;;;;;;;;;;;;;-1:-1:-1;1909:44:4;-1:-1:-1;;;;;1909:44:4;;:::i;:::-;;;;-1:-1:-1;;;;;1909:44:4;;;;;;;;;;;;;;1685:35:5;;;;;;;;;;;;;;;;-1:-1:-1;1685:35:5;;:::i;1829:34:4:-;;;;;;;;;;;;;;;;-1:-1:-1;1829:34:4;;:::i;4185:121:5:-;;;;;;;;;;;;;;;;-1:-1:-1;4185:121:5;-1:-1:-1;;;;;4185:121:5;;:::i;1956:145:13:-;;;:::i;1410:41:4:-;;;;;;;;;;;;;;;;-1:-1:-1;1410:41:4;-1:-1:-1;;;;;1410:41:4;;:::i;10124:96::-;;;;;;;;;;;;;;;;-1:-1:-1;10124:96:4;-1:-1:-1;;;;;10124:96:4;;:::i;1333:77:13:-;;;:::i;10484:79:4:-;;;:::i;6147:146::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6147:146:4;;;;;;;;:::i;6767:357::-;;;;;;;;;;;;;;;;-1:-1:-1;6767:357:4;;:::i;5788:115::-;;;;;;;;;;;;;;;;-1:-1:-1;5788:115:4;-1:-1:-1;;;;;5788:115:4;;:::i;9007:933::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9007:933:4;;-1:-1:-1;;;;;9007:933:4;;;;;;;;;;;-1:-1:-1;9007:933:4;-1:-1:-1;9007:933:4;;;;-1:-1:-1;9007:933:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9007:933:4;;-1:-1:-1;9007:933:4;;-1:-1:-1;;;;;9007:933:4:i;2934:129:5:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2934:129:5;;;;;;;;:::i;5170:446:4:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5170:446:4;;;;;;;;;;;;;;;:::i;10312:95::-;;;;;;;;;;;;;;;;-1:-1:-1;10312:95:4;-1:-1:-1;;;;;10312:95:4;;:::i;10960:877::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10960:877:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3606:134:5:-;;;;;;;;;;;;;;;;-1:-1:-1;3606:134:5;-1:-1:-1;;;;;3606:134:5;;:::i;1574:45::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1574:45:5;;;;;;;;:::i;778:118:4:-;;;:::i;1518:61::-;;;;;;;;;;;;;;;;-1:-1:-1;1518:61:4;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6470:133;;;;;;;;;;;;;;;;-1:-1:-1;6470:133:4;;:::i;2250:240:13:-;;;;;;;;;;;;;;;;-1:-1:-1;2250:240:13;-1:-1:-1;;;;;2250:240:13;;:::i;8086:442:4:-;8181:7;8230:21;;;:16;:21;;;;;8271:13;;8181:7;;8267:32;;8298:1;8291:8;;;;;;8267:32;-1:-1:-1;8319:13:4;;-1:-1:-1;;8319:17:4;8303:116;8344:1;8339;:6;8303:116;;8395:12;8361:6;8376:1;8361:18;;;;;;;;;;;;;;;;;;:30;;;:46;8357:57;;8409:5;;8357:57;-1:-1:-1;;8347:3:4;8303:116;;;8430:1;8426;:5;8422:19;;;8440:1;8433:8;;;;;;8422:19;8446:29;8478:6;8493:1;8478:18;;;;;;;;;;;;;;;;;;8446:50;;8507:5;:17;;;8500:24;;;;;8086:442;;;;;:::o;455:43::-;;;;;;;;;;;;;;-1:-1:-1;;;455:43:4;;;;:::o;3932:900::-;1547:12:13;:10;:12::i;:::-;1537:6;;-1:-1:-1;;;;;1537:6:13;;;:22;;;1529:67;;;;;-1:-1:-1;;;1529:67:13;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1529:67:13;;;;;;;;;;;;;;;4067:21:4;;::::1;::::0;;::::1;::::0;;;;4203:18:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;4203:18:4;::::1;::::0;;;;4193:29;4183:39;::::1;4238:12:::0;::::1;::::0;:54:::1;;;4254:33;4274:12;4254:19;:33::i;:::-;:38:::0;4238:54:::1;4226:102;;;::::0;;-1:-1:-1;;;4226:102:4;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;4333:9;4350:109;4358:11;4357:12;:44;;;;-1:-1:-1::0;4377:17:4::1;:24:::0;4373:28;::::1;4357:44;4350:109;;;4441:6;4417:17;4435:1;4417:20;;;;;;;;;;;;;;;;:30;4413:41;;;4449:5;;4413:41;4403:3;;4350:109;;;4490:11;4489:12;:45;;;;-1:-1:-1::0;4510:17:4::1;:24:::0;4505:29;::::1;4489:45;4485:91;;;4541:17;:30:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;4541:30:4;;;;;::::1;::::0;;;4485:91:::1;4584:11;4580:77;;;4602:50;4619:18;4639:12;4602:16;:50::i;:::-;4661:28;;:::i;:::-;4693:23:::0;;;4720:17:::1;::::0;;::::1;:32:::0;;;4776:12:::1;4756:17;::::0;::::1;:32:::0;;;4693:15:::1;4792:24:::0;;;:16:::1;:24;::::0;;;;;;:36;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;;::::1;;::::0;;;;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;4693:5;;4792:36;::::1;::::0;::::1;::::0;::::1;::::0;::::1;;:::i;:::-;;;;1606:1:13;;;;3932:900:4::0;;;:::o;3863:95:5:-;3907:7;3927:27;3941:12;3927:13;:27::i;:::-;3920:34;;3863:95;:::o;7427:499:4:-;7537:7;7585:21;;;:16;:21;;;;;7628:13;;7651:6;7647:20;;7666:1;7659:8;;;;;;7647:20;7671:29;7703:6;7722:1;7718;:5;7703:22;;;;;;;;;;;;;;;;;;7671:54;;7742:1;7738;:5;7734:9;;7729:118;7750:1;7745;:6;7729:118;;7788:12;7767:5;:17;;;:33;7763:44;;7802:5;;7763:44;7820:6;7839:1;7835;:5;7820:22;;;;;;;;;;;;;;;;;;7812:30;;7753:3;;;;;;;;7729:118;;;7858:1;7854;:5;7850:19;;;7868:1;7861:8;;;;;;;7850:19;7899:15;7881:34;;;;:17;:34;;;;;;;;-1:-1:-1;;;;;7881:41:4;;;;;;;;;;;-1:-1:-1;;;7427:499:4;;;;;;:::o;562:131::-;606:87;562:131;:::o;1682:72::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;2053:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;666:21:5:-;;;;;;:::o;1986:129::-;2064:4;1547:12:13;:10;:12::i;:::-;1537:6;;-1:-1:-1;;;;;1537:6:13;;;:22;;;1529:67;;;;;-1:-1:-1;;;1529:67:13;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1529:67:13;;;;;;;;;;;;;;;2075:21:5::1;2081:5;2088:7;2075:5;:21::i;:::-;-1:-1:-1::0;2107:4:5::1;::::0;1986:129;-1:-1:-1;;;1986:129:5:o;4565:360::-;-1:-1:-1;;;;;4684:16:5;;4661:7;4684:16;;;:8;:16;;;;;:23;:28;;4683:82;;-1:-1:-1;;;;;;4729:16:5;;;;;;:8;:16;;;;;:19;;4752:12;;4729:16;:19;;;;;;;;;;;;-1:-1:-1;;;;;4721:43:5;;4683:82;4675:247;;;-1:-1:-1;4782:1:5;4775:8;;4675:247;-1:-1:-1;;;;;4886:16:5;;;;;;:8;:16;;;;;4875:42;;4904:12;4875:10;:42::i;:::-;4868:49;;;;1909:44:4;;;;;;;;;;;;-1:-1:-1;;;;;1909:44:4;;:::o;1685:35:5:-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1685:35:5;:::o;1829:34:4:-;;;;;;;;;;4185:121:5;4241:15;4269:33;4281:6;4289:12;4269:11;:33::i;:::-;4262:40;;4185:121;;;;:::o;1956:145:13:-;1547:12;:10;:12::i;:::-;1537:6;;-1:-1:-1;;;;;1537:6:13;;;:22;;;1529:67;;;;;-1:-1:-1;;;1529:67:13;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1529:67:13;;;;;;;;;;;;;;;2046:6:::1;::::0;2025:40:::1;::::0;2062:1:::1;::::0;-1:-1:-1;;;;;2046:6:13::1;::::0;2025:40:::1;::::0;2062:1;;2025:40:::1;2075:6;:19:::0;;-1:-1:-1;;;;;;2075:19:13::1;::::0;;1956:145::o;1410:41:4:-;;;;;;;;;;;;;:::o;10124:96::-;-1:-1:-1;;;;;10200:16:4;;;10180:7;10200:16;;;:9;:16;;;;;;;;10124:96::o;1333:77:13:-;1397:6;;-1:-1:-1;;;;;1397:6:13;1333:77;:::o;10484:79:4:-;10524:35;10536:10;10548;10524:11;:35::i;:::-;10484:79::o;6147:146::-;6231:7;6252:37;6263:5;6270:4;6276:12;6252:10;:37::i;6767:357::-;6850:7;6864:22;6889:33;6909:12;6889:19;:33::i;:::-;6864:58;;6931:9;6926:170;6950:17;:24;6946:28;;6926:170;;;7003:88;7027:59;7051:17;7069:1;7051:20;;;;;;;;;;;;;;;;7073:12;7027:23;:59::i;:::-;7003:14;;:18;:88::i;:::-;6986:105;-1:-1:-1;6976:3:4;;6926:170;;;-1:-1:-1;7106:14:4;6767:357;-1:-1:-1;;6767:357:4:o;5788:115::-;5842:7;5862:37;5873:5;5880:4;5886:12;5862:10;:37::i;9007:933::-;9174:21;;;;;;;;;;9147:4;9211:24;;;:16;:24;;;;;;:31;9199:86;;;;;-1:-1:-1;;;9199:86:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;9289:17;9312:24;;;:16;:24;;;;;9337:31;;-1:-1:-1;;9337:35:4;;;9312:61;;;;;;;;;;;;;;;;;;;;;:76;9496:28;;;:17;:28;;;;;;-1:-1:-1;;;;;9496:35:4;;;;;;;;;;9312:76;;-1:-1:-1;9496:40:4;9484:87;;;;;-1:-1:-1;;;9484:87:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;9579:17;9603:53;9621:5;9628:8;9638:9;9649:6;9603:17;:53::i;:::-;9576:80;;;9668:12;9660:45;;;;;-1:-1:-1;;;9660:45:4;;;;;;;;;;;;-1:-1:-1;;;9660:45:4;;;;;;;;;;;;;;;9778:18;;;;;;;;;;;;-1:-1:-1;;;9778:18:4;;;;;9768:29;9758:39;;9754:77;;;9804:22;9810:5;9817:8;9804:5;:22::i;:::-;;9754:77;-1:-1:-1;9875:28:4;;;;:17;:28;;;;;;;;-1:-1:-1;;;;;9875:35:4;;;;;;;;;:46;;;-1:-1:-1;9932:4:4;;-1:-1:-1;9007:933:4;;;;;;:::o;2934:129:5:-;3012:4;1547:12:13;:10;:12::i;:::-;1537:6;;-1:-1:-1;;;;;1537:6:13;;;:22;;;1529:67;;;;;-1:-1:-1;;;1529:67:13;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1529:67:13;;;;;;;;;;;;;;;3023:21:5::1;3029:5;3036:7;3023:5;:21::i;5170:446:4:-:0;-1:-1:-1;;;;;5321:18:4;;5271:7;5321:18;;;:11;:18;;;;;5271:7;;5310:44;;5341:12;5310:10;:44::i;:::-;5284:70;;5363:7;5359:227;;;5382:9;5377:205;5401:17;:24;5397:28;;5377:205;;;5456:120;5482:88;5510:17;5528:1;5510:20;;;;;;;;;;;;;;;;5538:5;5551:12;5482:20;:88::i;5456:120::-;5438:138;-1:-1:-1;5427:3:4;;5377:205;;;;5359:227;5597:15;5170:446;-1:-1:-1;;;;5170:446:4:o;10312:95::-;10369:34;10381:10;10393:9;10369:11;:34::i;:::-;10312:95;:::o;10960:877::-;11194:4;;;;;;;;;;;;-1:-1:-1;;;11194:4:4;;;;;11095:23;606:87;11178:22;11207:12;:10;:12::i;:::-;11139:106;;;;;;;;;;;;;;;;;;;;;;;;;11234:4;11139:106;;;;;;;;;;;;;;;;;;;;;;;11124:126;;;;;;826:70;11293:59;;;;-1:-1:-1;;;;;11293:59:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11278:79;;;;;;-1:-1:-1;;;11396:57:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11381:77;;;;;;;;;-1:-1:-1;11482:29:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11124:126;;-1:-1:-1;11278:79:4;;11381:77;;-1:-1:-1;;11482:29:4;;;;;;;-1:-1:-1;;11482:29:4;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11482:29:4;;-1:-1:-1;;11482:29:4;;;-1:-1:-1;;;;;;;11527:23:4;;11515:91;;;;-1:-1:-1;;;11515:91:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11632:17:4;;;;;;:6;:17;;;;;:19;;;;;;;;11622:29;;11610:93;;;;-1:-1:-1;;;11610:93:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11726:7;11719:3;:14;;11707:82;;;;-1:-1:-1;;;11707:82:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11800:33;11812:9;11823;11800:11;:33::i;3606:134:5:-;1472:13:16;;;;;;;;:33;;;1489:16;:14;:16::i;:::-;1472:50;;;-1:-1:-1;1510:12:16;;;;1509:13;1472:50;1464:109;;;;-1:-1:-1;;;1464:109:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1584:19;1607:13;;;;;;1606:14;1630:98;;;;1664:13;:20;;-1:-1:-1;;;;1664:20:16;;;;;1698:19;1680:4;1698:19;;;1630:98;3665:8:5::1;:12:::0;;-1:-1:-1;;3665:12:5::1;::::0;;3681:26:::1;:24;:26::i;:::-;3711:25;3729:6;3711:17;:25::i;:::-;1754:14:16::0;1750:66;;;1800:5;1784:21;;-1:-1:-1;;1784:21:16;;;1750:66;3606:134:5;;:::o;1574:45::-;;;;;;;;;;;;;;;;;;778:118:4;826:70;778:118;:::o;1518:61::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1518:61:4;-1:-1:-1;1518:61:4;:::o;6470:133::-;6545:7;6566:33;6586:12;6566:19;:33::i;2250:240:13:-;1547:12;:10;:12::i;:::-;1537:6;;-1:-1:-1;;;;;1537:6:13;;;:22;;;1529:67;;;;;-1:-1:-1;;;1529:67:13;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1529:67:13;;;;;;;;;;;;;;;-1:-1:-1;;;;;2338:22:13;::::1;2330:73;;;;-1:-1:-1::0;;;2330:73:13::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2439:6;::::0;2418:38:::1;::::0;-1:-1:-1;;;;;2418:38:13;;::::1;::::0;2439:6:::1;::::0;2418:38:::1;::::0;2439:6:::1;::::0;2418:38:::1;2466:6;:17:::0;;-1:-1:-1;;;;;;2466:17:13::1;-1:-1:-1::0;;;;;2466:17:13;;;::::1;::::0;;;::::1;::::0;;2250:240::o;828:104:12:-;915:10;828:104;:::o;5134:356:5:-;5239:18;:25;5216:7;;5239:30;;5238:86;;;5311:12;5286:18;5305:1;5286:21;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5278:45:5;;5238:86;5230:257;;;-1:-1:-1;5341:1:5;5334:8;;5230:257;5438:44;5449:18;5469:12;5438:10;:44::i;:::-;5431:51;;;;6723:536;6839:6;6828;-1:-1:-1;;;;;6820:25:5;;6812:57;;;;;-1:-1:-1;;;6812:57:5;;;;;;;;;;;;-1:-1:-1;;;6812:57:5;;;;;;;;;;;;;;;6926:18;;:23;;6925:93;;-1:-1:-1;6978:18:5;;7005:12;;6966:11;;-1:-1:-1;;6978:22:5;;;6966:35;;;;;;;;;;;;;;-1:-1:-1;;;;;6958:59:5;;6925:93;6917:339;;;7028:66;;;;;;;-1:-1:-1;7028:66:5;;;;;;-1:-1:-1;;;;;7061:12:5;7045:30;7089:3;7079:13;;;7045:48;7028:66;;;6917:339;;;7242:3;7232:6;:13;;-1:-1:-1;;;;;7162:11:5;7195:1;7174:11;:18;;;;:22;7162:35;;;;;;;;;;;;;;;;:60;7161:85;7110:11;7143:1;7122:11;:18;;;;:22;7110:35;;;;;;;;;;;;;;;;;:141;6723:536;;:::o;2547:423:4:-;2627:7;2641:27;2653:5;2660:7;2641:11;:27::i;:::-;-1:-1:-1;;;;;;2692:16:4;;;2672:17;2692:16;;;:9;:16;;;;;;;2724:23;:43;;2762:5;2724:43;;;2750:9;2724:43;-1:-1:-1;;;;;2771:16:4;;;;;;;:9;:16;;;;;:28;;-1:-1:-1;;;;;;2771:28:4;;;;;;;;;;;;;-1:-1:-1;2827:19:4;2771:28;2827:8;:19::i;:::-;2803:43;-1:-1:-1;2851:97:4;2876:9;2890:5;2803:43;2918:26;2803:43;2936:7;2918:17;:26::i;:::-;2851:20;:97::i;:::-;-1:-1:-1;2959:7:4;;2547:423;-1:-1:-1;;;2547:423:4:o;5859:657:5:-;5983:18;;5955:7;;6009:8;6005:32;;6031:1;6024:8;;;;;6005:32;6075:11;6089;6107:1;6101:3;:7;6089:20;;;;;;;;;;;;;;;;6075:34;;6135:3;-1:-1:-1;;;;;6117:22:5;:6;:22;6113:55;;6160:3;6153:10;;-1:-1:-1;6146:17:5;;-1:-1:-1;6146:17:5;6113:55;6193:11;6205:1;6193:14;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6176:32:5;:6;:32;6172:56;;;6222:1;6215:8;;;;;;6172:56;6277:11;-1:-1:-1;;6310:7:5;;6321:158;6334:3;6328;:9;6321:158;;;6344:11;6376:1;6371;6359:9;;;:13;6358:19;6344:33;;6415:6;6394:11;6406:3;6394:16;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6386:35:5;;6382:93;;6435:3;6429:9;;6382:93;;;6468:1;6462:3;:7;6456:13;;6382:93;6321:158;;;;6509:3;6489:11;6501:3;6489:16;;;;;;;;;;;;;;;;:23;;6482:30;;;;;;5859:657;;;;:::o;12000:885:4:-;-1:-1:-1;;;;;12080:23:4;;12068:97;;;;-1:-1:-1;;;12068:97:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12193:16:4;;;12170:20;12193:16;;;:9;:16;;;;;;;;;12221:25;;;;;12213:69;;;;;-1:-1:-1;;;12213:69:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12287:16:4;;;;;;;:9;:16;;;;;:28;;-1:-1:-1;;;;;;12287:28:4;;;;;;;;;;;12383:16;12287;12383:9;:16::i;:::-;12361:38;-1:-1:-1;;;;;;12483:26:4;;;12479:210;;12516:16;12535:45;12546:12;12560:5;12567:12;12535:10;:45::i;:::-;12516:64;-1:-1:-1;12585:99:4;12611:12;12629:5;12516:64;12654:25;12516:64;12667:11;12654:12;:25::i;12585:99::-;12479:210;;12725:16;12744:42;12755:9;12766:5;12773:12;12744:10;:42::i;:::-;12725:61;-1:-1:-1;12790:91:4;12815:9;12829:5;12725:61;12852:25;12725:61;12865:11;12852:12;:25::i;12790:91::-;12000:885;;;;;:::o;893:176:15:-;951:7;982:5;;;1005:6;;;;997:46;;;;;-1:-1:-1;;;997:46:15;;;;;;;;;;;;;;;;;;;;;;;;;;;13636:301:4;13832:27;;;-1:-1:-1;;;;;13832:27:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13822:38;;;;;13770:16;13879:54;13909:6;13917:5;13822:38;13879:29;:54::i;:::-;13864:69;;13636:301;;;;;;;:::o;3194:457::-;3274:7;3288:20;3311:27;3323:5;3330:7;3311:11;:27::i;:::-;-1:-1:-1;;;;;3362:16:4;;;3342:17;3362:16;;;:9;:16;;;;;;3288:50;;-1:-1:-1;3362:16:4;3394:23;:43;;3432:5;3394:43;;;3420:9;3394:43;-1:-1:-1;;;;;3441:16:4;;;;;;;:9;:16;;;;;:28;;-1:-1:-1;;;;;;3441:28:4;;;;;;;;;;;;;-1:-1:-1;3497:19:4;3441:28;3497:8;:19::i;:::-;3473:43;-1:-1:-1;3521:102:4;3546:9;3560:5;3473:43;3588:31;3473:43;3606:12;3588:17;:31::i;3521:102::-;-1:-1:-1;3635:12:4;;3194:457;-1:-1:-1;;;;3194:457:4:o;14015:136::-;14117:9;14015:136;:::o;1912:593:16:-;2348:4;2456:17;2491:7;1912:593;:::o;1065:192:13:-;1472:13:16;;;;;;;;:33;;;1489:16;:14;:16::i;:::-;1472:50;;;-1:-1:-1;1510:12:16;;;;1509:13;1472:50;1464:109;;;;-1:-1:-1;;;1464:109:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1584:19;1607:13;;;;;;1606:14;1630:98;;;;1664:13;:20;;-1:-1:-1;;;;1664:20:16;;;;;1698:19;1680:4;1698:19;;;1630:98;1132:17:13::1;1152:12;:10;:12::i;:::-;1174:6;:18:::0;;-1:-1:-1;;;;;;1174:18:13::1;-1:-1:-1::0;;;;;1174:18:13;::::1;::::0;;::::1;::::0;;;1207:43:::1;::::0;1174:18;;-1:-1:-1;1174:18:13;-1:-1:-1;;1207:43:13::1;::::0;-1:-1:-1;;1207:43:13::1;1738:1:16;1754:14:::0;1750:66;;;1800:5;1784:21;;-1:-1:-1;;1784:21:16;;;1065:192:13;:::o;2118:587:5:-;2197:7;2211:22;2236:13;:11;:13::i;:::-;2211:38;;2293:14;2282:7;2265:14;:24;:42;;2253:86;;;;;-1:-1:-1;;;2253:86:5;;;;;;;;;;;;-1:-1:-1;;;2253:86:5;;;;;;;;;;;;;;;2365:25;2393:16;2403:5;2393:9;:16::i;:::-;2365:44;;2456:17;2445:7;2425:17;:27;:48;;2413:87;;;;;-1:-1:-1;;;2413:87:5;;;;;;;;;;;;-1:-1:-1;;;2413:87:5;;;;;;;;;;;;;;;2526:62;2543:18;2580:7;2563:14;:24;2526:16;:62::i;:::-;-1:-1:-1;;;;;2609:15:5;;;;;;:8;:15;;;;;2592:62;;2626:27;;;2592:16;:62::i;:::-;2663:20;;;;;;;;-1:-1:-1;;;;;2663:20:5;;;;;;;;;;;;;-1:-1:-1;2694:7:5;;2118:587;-1:-1:-1;;;2118:587:5:o;13180:260:4:-;-1:-1:-1;;;;;13328:22:4;;;;;;:11;:22;;;;;13311:51;;13352:9;13311:16;:51::i;:::-;13403:10;-1:-1:-1;;;;;13371:65:4;13392:9;-1:-1:-1;;;;;13371:65:4;;13415:9;13426;13371:65;;;;;;;;;;;;;;;;;;;;;;;;13180:260;;;;:::o;1340:134:15:-;1398:7;1424:43;1428:1;1431;1424:43;;;;;;;;;;;;;;;;;:3;:43::i;516:779:14:-;607:4;646;607;661:515;685:5;:12;681:1;:16;661:515;;;718:20;741:5;747:1;741:8;;;;;;;;;;;;;;718:31;;784:12;768;:28;764:402;;936:12;950;919:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;909:55;;;;;;894:70;;764:402;;;1123:12;1137;1106:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1096:55;;;;;;1081:70;;764:402;-1:-1:-1;699:3:14;;661:515;;;-1:-1:-1;1268:20:14;;;;516:779;-1:-1:-1;;;516:779:14:o;3066:507:5:-;3145:7;3159:22;3184:13;:11;:13::i;:::-;3159:38;-1:-1:-1;3224:7:5;3201:20;3265:16;3275:5;3265:9;:16::i;:::-;3235:46;;3311:12;3289:19;:34;3285:84;;;3345:19;3330:34;;3285:84;3372:67;3389:18;3426:12;3409:14;:29;3372:16;:67::i;:::-;-1:-1:-1;;;;;3460:15:5;;;;;;:8;:15;;;;;3443:69;;3477:34;;;3443:16;:69::i;:::-;3521:25;;;;;;;;-1:-1:-1;;;;;3521:25:5;;;;;;;;;;;;;-1:-1:-1;3557:12:5;3066:507;-1:-1:-1;;;;3066:507:5:o;1765:187:15:-;1851:7;1886:12;1878:6;;;;1870:29;;;;-1:-1:-1;;;1870:29:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1921:5:15;;;1765:187::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;",
  "source": "// SPDX-License-Identifier: MIT\npragma solidity >=0.6.0;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/cryptography/MerkleProofUpgradeable.sol\";\n\nimport \"./Reputation.sol\";\nimport \"../Interfaces.sol\";\n\n/**\n * @title GReputation extends Reputation with delegation and cross blockchain merkle states\n */\ncontract GReputation is Reputation {\n\tusing SafeMathUpgradeable for uint256;\n\n\tstring public constant name = \"GReputation\";\n\n\t/// @notice The EIP-712 typehash for the contract's domain\n\tbytes32 public constant DOMAIN_TYPEHASH =\n\t\tkeccak256(\n\t\t\t\"EIP712Domain(string name,uint256 chainId,address verifyingContract)\"\n\t\t);\n\n\t/// @notice The EIP-712 typehash for the delegation struct used by the contract\n\tbytes32 public constant DELEGATION_TYPEHASH =\n\t\tkeccak256(\"Delegation(address delegate,uint256 nonce,uint256 expiry)\");\n\n\t/// @notice describe a single blockchain states\n\t/// @param stateHash the hash with the reputation state\n\t/// @param hashType the type of hash. currently just 0 = merkle tree root hash\n\t/// @param totalSupply the totalSupply at the blockchain\n\t/// @param blockNumber the effective blocknumber\n\tstruct BlockchainState {\n\t\tbytes32 stateHash;\n\t\tuint256 hashType;\n\t\tuint256 totalSupply;\n\t\tuint256 blockNumber;\n\t\tuint256[5] __reserevedSpace;\n\t}\n\n\t/// @notice A record of states for signing / validating signatures\n\tmapping(address => uint256) public nonces;\n\n\t/// @notice mapping from blockchain id hash to list of states\n\tmapping(bytes32 => BlockchainState[]) public blockchainStates;\n\n\t/// @notice mapping from stateHash to the user balance can be >0 only after supplying state proof\n\tmapping(bytes32 => mapping(address => uint256)) public stateHashBalances;\n\n\t/// @notice list of blockchains having a statehash for easy iteration\n\tbytes32[] public activeBlockchains;\n\n\t/// @notice keep map of user -> delegate\n\tmapping(address => address) public delegates;\n\n\t/// @notice map of user non delegatd + delegated votes to user. this is used for actual voting\n\tmapping(address => uint256[]) public activeVotes;\n\n\t/// @notice An event thats emitted when a delegate account's vote balance changes\n\tevent DelegateVotesChanged(\n\t\taddress indexed delegate,\n\t\taddress indexed delegator,\n\t\tuint256 previousBalance,\n\t\tuint256 newBalance\n\t);\n\n\t/// @notice internal function that overrides Reputation.sol with consideration to delegation\n\t/// @param _user the address to mint for\n\t/// @param _amount the amount of rep to mint\n\t/// @return the actual amount minted\n\tfunction _mint(address _user, uint256 _amount)\n\t\tinternal\n\t\toverride\n\t\treturns (uint256)\n\t{\n\t\tsuper._mint(_user, _amount);\n\t\taddress delegator = delegates[_user];\n\t\tdelegator = delegator != address(0) ? delegator : _user;\n\t\tdelegates[_user] = delegator;\n\t\tuint256 previousVotes = getVotes(delegator);\n\n\t\t_updateDelegateVotes(\n\t\t\tdelegator,\n\t\t\t_user,\n\t\t\tpreviousVotes,\n\t\t\tpreviousVotes.add(_amount)\n\t\t);\n\t\treturn _amount;\n\t}\n\n\t/// @notice internal function that overrides Reputation.sol with consideration to delegation\n\t/// @param _user the address to burn from\n\t/// @param _amount the amount of rep to mint\n\t/// @return the actual amount burned\n\tfunction _burn(address _user, uint256 _amount)\n\t\tinternal\n\t\toverride\n\t\treturns (uint256)\n\t{\n\t\tuint256 amountBurned = super._burn(_user, _amount);\n\t\taddress delegator = delegates[_user];\n\t\tdelegator = delegator != address(0) ? delegator : _user;\n\t\tdelegates[_user] = delegator;\n\t\tuint256 previousVotes = getVotes(delegator);\n\n\t\t_updateDelegateVotes(\n\t\t\tdelegator,\n\t\t\t_user,\n\t\t\tpreviousVotes,\n\t\t\tpreviousVotes.sub(amountBurned)\n\t\t);\n\n\t\treturn amountBurned;\n\t}\n\n\t/// @notice sets the state hash of a blockchain, can only be called by owner\n\t/// @param _id the string name of the blockchain (will be hashed to produce byte32 id)\n\t/// @param _hash the state hash\n\t/// @param _totalSupply total supply of reputation on the specific blockchain\n\tfunction setBlockchainStateHash(\n\t\tstring memory _id,\n\t\tbytes32 _hash,\n\t\tuint256 _totalSupply\n\t) public onlyOwner {\n\t\tbytes32 idHash = keccak256(bytes(_id));\n\n\t\t//dont consider rootState as blockchain,  it is a special state hash\n\t\tbool isRootState = idHash == keccak256(bytes(\"rootState\"));\n\t\trequire(\n\t\t\t!isRootState || super.totalSupplyAt(block.number) == 0,\n\t\t\t\"rootState already created\"\n\t\t);\n\n\t\tuint256 i = 0;\n\t\tfor (; !isRootState && i < activeBlockchains.length; i++) {\n\t\t\tif (activeBlockchains[i] == idHash) break;\n\t\t}\n\n\t\t//if new blockchain\n\t\tif (!isRootState && i == activeBlockchains.length) {\n\t\t\tactiveBlockchains.push(idHash);\n\t\t}\n\n\t\tif (isRootState) {\n\t\t\tupdateValueAtNow(totalSupplyHistory, _totalSupply);\n\t\t}\n\n\t\tBlockchainState memory state;\n\t\tstate.stateHash = _hash;\n\t\tstate.totalSupply = _totalSupply;\n\t\tstate.blockNumber = block.number;\n\t\tblockchainStates[idHash].push(state);\n\t}\n\n\t/// @notice get the number of active votes a user holds after delegation (vs the basic balance of reputation he holds)\n\t/// @param _user the user to get active votes for\n\t/// @param _global wether to include reputation from other blockchains\n\t/// @param _blockNumber get votes state at specific block\n\t/// @return the number of votes\n\tfunction getVotesAt(\n\t\taddress _user,\n\t\tbool _global,\n\t\tuint256 _blockNumber\n\t) public view returns (uint256) {\n\t\tuint256 startingBalance = getValueAt(activeVotes[_user], _blockNumber);\n\n\t\tif (_global) {\n\t\t\tfor (uint256 i = 0; i < activeBlockchains.length; i++) {\n\t\t\t\tstartingBalance = startingBalance.add(\n\t\t\t\t\tgetVotesAtBlockchain(\n\t\t\t\t\t\tactiveBlockchains[i],\n\t\t\t\t\t\t_user,\n\t\t\t\t\t\t_blockNumber\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn startingBalance;\n\t}\n\n\t/**\n\t * @notice returns aggregated active votes in all blockchains and delegated\n\t * @param _user the user to get active votes for\n\t * @return the number of votes\n\t */\n\tfunction getVotes(address _user) public view returns (uint256) {\n\t\treturn getVotesAt(_user, true, block.number);\n\t}\n\n\t/**\n\t * @notice returns aggregated active votes in all blockchains and delegated at specific block\n\t * @param _user user to get active votes for\n\t * @param _blockNumber get votes state at specific block\n\t * @return the number of votes\n\t */\n\tfunction getVotesAt(address _user, uint256 _blockNumber)\n\t\tpublic\n\t\tview\n\t\treturns (uint256)\n\t{\n\t\treturn getVotesAt(_user, true, _blockNumber);\n\t}\n\n\t/**\n\t * @notice returns total supply in current blockchain (super.balanceOfAt)\n\t * @param _blockNumber get total supply at specific block\n\t * @return the totaly supply\n\t */\n\tfunction totalSupplyLocal(uint256 _blockNumber)\n\t\tpublic\n\t\tview\n\t\treturns (uint256)\n\t{\n\t\treturn super.totalSupplyAt(_blockNumber);\n\t}\n\n\t/**\n\t * @notice returns total supply in all blockchain aggregated\n\t * @param _blockNumber get total supply at specific block\n\t * @return the totaly supply\n\t */\n\tfunction totalSupplyAt(uint256 _blockNumber)\n\t\tpublic\n\t\tview\n\t\toverride\n\t\treturns (uint256)\n\t{\n\t\tuint256 startingSupply = super.totalSupplyAt(_blockNumber);\n\t\tfor (uint256 i = 0; i < activeBlockchains.length; i++) {\n\t\t\tstartingSupply = startingSupply.add(\n\t\t\t\ttotalSupplyAtBlockchain(activeBlockchains[i], _blockNumber)\n\t\t\t);\n\t\t}\n\t\treturn startingSupply;\n\t}\n\n\t/// @notice get the number of active votes a user holds after delegation in specific blockchain\n\t/// @param _id the keccak hash of the blockchain string id\n\t/// @param _user the user to get active votes for\n\t/// @param _blockNumber get votes state at specific block\n\t/// @return the number of votes\n\tfunction getVotesAtBlockchain(\n\t\tbytes32 _id,\n\t\taddress _user,\n\t\tuint256 _blockNumber\n\t) public view returns (uint256) {\n\t\tBlockchainState[] storage states = blockchainStates[_id];\n\t\tint256 i = int256(states.length);\n\n\t\tif (i == 0) return 0;\n\t\tBlockchainState storage state = states[uint256(i - 1)];\n\t\tfor (i = i - 1; i >= 0; i--) {\n\t\t\tif (state.blockNumber <= _blockNumber) break;\n\t\t\tstate = states[uint256(i - 1)];\n\t\t}\n\t\tif (i < 0) return 0;\n\n\t\treturn stateHashBalances[state.stateHash][_user];\n\t}\n\n\t/**\n\t * @notice returns total supply in a specific blockchain\n\t * @param _blockNumber get total supply at specific block\n\t * @return the totaly supply\n\t */\n\tfunction totalSupplyAtBlockchain(bytes32 _id, uint256 _blockNumber)\n\t\tpublic\n\t\tview\n\t\treturns (uint256)\n\t{\n\t\tBlockchainState[] storage states = blockchainStates[_id];\n\t\tint256 i;\n\t\tif (states.length == 0) return 0;\n\t\tfor (i = int256(states.length - 1); i >= 0; i--) {\n\t\t\tif (states[uint256(i)].blockNumber <= _blockNumber) break;\n\t\t}\n\t\tif (i < 0) return 0;\n\n\t\tBlockchainState storage state = states[uint256(i)];\n\t\treturn state.totalSupply;\n\t}\n\n\t/**\n\t * @notice prove user balance in a specific blockchain state hash\n\t * @dev \"rootState\" is a special state that can be supplied once, and actually mints reputation on the current blockchain\n\t * @param _id the string id of the blockchain we supply proof for\n\t * @param _user the user to prove his balance\n\t * @param _balance the balance we are prooving\n\t * @param _proof array of byte32 with proof data (currently merkle tree path)\n\t * @return true if proof is valid\n\t */\n\tfunction proveBalanceOfAtBlockchain(\n\t\tstring memory _id,\n\t\taddress _user,\n\t\tuint256 _balance,\n\t\tbytes32[] memory _proof\n\t) public returns (bool) {\n\t\tbytes32 idHash = keccak256(bytes(_id));\n\t\trequire(\n\t\t\tblockchainStates[idHash].length > 0,\n\t\t\t\"no state found for given _id\"\n\t\t);\n\t\tbytes32 stateHash =\n\t\t\tblockchainStates[idHash][blockchainStates[idHash].length - 1]\n\t\t\t\t.stateHash;\n\n\t\t//this is specifically important for rootState that should update real balance only once\n\t\trequire(\n\t\t\tstateHashBalances[stateHash][_user] == 0,\n\t\t\t\"stateHash already proved\"\n\t\t);\n\n\t\t(, bool isProofValid) =\n\t\t\t_checkMerkleProof(_user, _balance, stateHash, _proof);\n\t\trequire(isProofValid, \"invalid merkle proof\");\n\n\t\t//if initiial state then set real balance\n\t\tif (idHash == keccak256(bytes(\"rootState\"))) {\n\t\t\t_mint(_user, _balance);\n\t\t}\n\n\t\t//if proof is valid then set balances\n\t\tstateHashBalances[stateHash][_user] = _balance;\n\t\treturn true;\n\t}\n\n\t/// @notice returns current delegate of _user\n\t/// @param _user the delegatee\n\t/// @return the address of the delegate (can be _user  if no delegate or 0x0 if _user doesnt exists)\n\tfunction delegateOf(address _user) public view returns (address) {\n\t\treturn delegates[_user];\n\t}\n\n\t/// @notice delegate votes to another user\n\t/// @param _delegate the recipient of votes\n\tfunction delegateTo(address _delegate) public {\n\t\treturn _delegateTo(msg.sender, _delegate);\n\t}\n\n\t/// @notice cancel user delegation\n\t/// @dev makes user his own delegate\n\tfunction undelegate() public {\n\t\treturn _delegateTo(msg.sender, msg.sender);\n\t}\n\n\t/**\n\t * @notice Delegates votes from signatory to `delegate`\n\t * @param _delegate The address to delegate votes to\n\t * @param _nonce The contract state required to match the signature\n\t * @param _expiry The time at which to expire the signature\n\t * @param _v The recovery byte of the signature\n\t * @param _r Half of the ECDSA signature pair\n\t * @param _s Half of the ECDSA signature pair\n\t */\n\tfunction delegateBySig(\n\t\taddress _delegate,\n\t\tuint256 _nonce,\n\t\tuint256 _expiry,\n\t\tuint8 _v,\n\t\tbytes32 _r,\n\t\tbytes32 _s\n\t) public {\n\t\tbytes32 domainSeparator =\n\t\t\tkeccak256(\n\t\t\t\tabi.encode(\n\t\t\t\t\tDOMAIN_TYPEHASH,\n\t\t\t\t\tkeccak256(bytes(name)),\n\t\t\t\t\tgetChainId(),\n\t\t\t\t\taddress(this)\n\t\t\t\t)\n\t\t\t);\n\t\tbytes32 structHash =\n\t\t\tkeccak256(\n\t\t\t\tabi.encode(DELEGATION_TYPEHASH, _delegate, _nonce, _expiry)\n\t\t\t);\n\t\tbytes32 digest =\n\t\t\tkeccak256(\n\t\t\t\tabi.encodePacked(\"\\x19\\x01\", domainSeparator, structHash)\n\t\t\t);\n\t\taddress signatory = ecrecover(digest, _v, _r, _s);\n\t\trequire(\n\t\t\tsignatory != address(0),\n\t\t\t\"GReputation::delegateBySig: invalid signature\"\n\t\t);\n\t\trequire(\n\t\t\t_nonce == nonces[signatory]++,\n\t\t\t\"GReputation::delegateBySig: invalid nonce\"\n\t\t);\n\t\trequire(\n\t\t\tnow <= _expiry,\n\t\t\t\"GReputation::delegateBySig: signature expired\"\n\t\t);\n\t\treturn _delegateTo(signatory, _delegate);\n\t}\n\n\t/// @notice internal function to delegate votes to another user\n\t/// @param _user the source of votes (delegator)\n\t/// @param _delegate the recipient of votes\n\tfunction _delegateTo(address _user, address _delegate) internal {\n\t\trequire(\n\t\t\t_delegate != address(0),\n\t\t\t\"GReputation::delegate can't delegat to null address\"\n\t\t);\n\n\t\taddress curDelegator = delegates[_user];\n\t\trequire(curDelegator != _delegate, \"already delegating to delegator\");\n\n\t\tdelegates[_user] = _delegate;\n\n\t\t// remove votes from current delegator\n\t\tuint256 coreBalance = balanceOf(_user);\n\t\t//redundant check - should not be possible to have address 0 as delegator\n\t\tif (curDelegator != address(0)) {\n\t\t\tuint256 curVotes = getVotesAt(curDelegator, false, block.number);\n\t\t\t_updateDelegateVotes(\n\t\t\t\tcurDelegator,\n\t\t\t\t_user,\n\t\t\t\tcurVotes,\n\t\t\t\tcurVotes.sub(coreBalance)\n\t\t\t);\n\t\t}\n\n\t\t//move votes to new delegator\n\t\tuint256 curVotes = getVotesAt(_delegate, false, block.number);\n\t\t_updateDelegateVotes(\n\t\t\t_delegate,\n\t\t\t_user,\n\t\t\tcurVotes,\n\t\t\tcurVotes.add(coreBalance)\n\t\t);\n\t}\n\n\t/// @notice internal function to update delegated votes, emits event with changes\n\t/// @param _delegate the delegate whose record we are updating\n\t/// @param _delegator the delegator\n\t/// @param _oldVotes the delegate previous votes\n\t/// @param _newVotes the delegate votes after the change\n\tfunction _updateDelegateVotes(\n\t\taddress _delegate,\n\t\taddress _delegator,\n\t\tuint256 _oldVotes,\n\t\tuint256 _newVotes\n\t) internal {\n\t\tupdateValueAtNow(activeVotes[_delegate], _newVotes);\n\t\temit DelegateVotesChanged(_delegate, _delegator, _oldVotes, _newVotes);\n\t}\n\n\t/// @notice helper function to check merkle proof using openzeppelin\n\t/// @return leafHash isProofValid tuple (byte32, bool) with the hash of the leaf data we prove and true if proof is valid\n\tfunction _checkMerkleProof(\n\t\taddress _user,\n\t\tuint256 _balance,\n\t\tbytes32 _root,\n\t\tbytes32[] memory _proof\n\t) internal pure returns (bytes32 leafHash, bool isProofValid) {\n\t\tleafHash = keccak256(abi.encode(_user, _balance));\n\t\tisProofValid = MerkleProofUpgradeable.verify(_proof, _root, leafHash);\n\t}\n\n\t/// @notice helper function to get current chain id\n\t/// @return chain id\n\tfunction getChainId() internal pure returns (uint256) {\n\t\tuint256 chainId;\n\t\tassembly {\n\t\t\tchainId := chainid()\n\t\t}\n\t\treturn chainId;\n\t}\n}\n",
  "sourcePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/governance/GReputation.sol",
  "ast": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/governance/GReputation.sol",
    "exportedSymbols": {
      "GReputation": [
        3347
      ]
    },
    "id": 3348,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2303,
        "literals": [
          "solidity",
          ">=",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "32:24:4"
      },
      {
        "absolutePath": "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol",
        "id": 2304,
        "nodeType": "ImportDirective",
        "scope": 3348,
        "sourceUnit": 8141,
        "src": "58:74:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-upgradeable/cryptography/MerkleProofUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/cryptography/MerkleProofUpgradeable.sol",
        "id": 2305,
        "nodeType": "ImportDirective",
        "scope": 3348,
        "sourceUnit": 7945,
        "src": "133:85:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/governance/Reputation.sol",
        "file": "./Reputation.sol",
        "id": 2306,
        "nodeType": "ImportDirective",
        "scope": 3348,
        "sourceUnit": 3860,
        "src": "220:26:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/Interfaces.sol",
        "file": "../Interfaces.sol",
        "id": 2307,
        "nodeType": "ImportDirective",
        "scope": 3348,
        "sourceUnit": 552,
        "src": "247:27:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 2309,
              "name": "Reputation",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3859,
              "src": "400:10:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Reputation_$3859",
                "typeString": "contract Reputation"
              }
            },
            "id": 2310,
            "nodeType": "InheritanceSpecifier",
            "src": "400:10:4"
          }
        ],
        "contractDependencies": [
          3859,
          7743,
          7873,
          8211
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 2308,
          "nodeType": "StructuredDocumentation",
          "src": "276:99:4",
          "text": " @title GReputation extends Reputation with delegation and cross blockchain merkle states"
        },
        "fullyImplemented": true,
        "id": 3347,
        "linearizedBaseContracts": [
          3347,
          3859,
          7873,
          7743,
          8211
        ],
        "name": "GReputation",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 2313,
            "libraryName": {
              "contractScope": null,
              "id": 2311,
              "name": "SafeMathUpgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8140,
              "src": "420:19:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMathUpgradeable_$8140",
                "typeString": "library SafeMathUpgradeable"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "414:38:4",
            "typeName": {
              "id": 2312,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "444:7:4",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "functionSelector": "06fdde03",
            "id": 2316,
            "mutability": "constant",
            "name": "name",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 3347,
            "src": "455:43:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory_ptr",
              "typeString": "string"
            },
            "typeName": {
              "id": 2314,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "455:6:4",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "4752657075746174696f6e",
              "id": 2315,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "485:13:4",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_6d6957b3a4022b7a24cdd877ade4bdbb5b5a4e21c5304908c958d003c049de6c",
                "typeString": "literal_string \"GReputation\""
              },
              "value": "GReputation"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "documentation": {
              "id": 2317,
              "nodeType": "StructuredDocumentation",
              "src": "502:58:4",
              "text": "@notice The EIP-712 typehash for the contract's domain"
            },
            "functionSelector": "20606b70",
            "id": 2322,
            "mutability": "constant",
            "name": "DOMAIN_TYPEHASH",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 3347,
            "src": "562:131:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 2318,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "562:7:4",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "454950373132446f6d61696e28737472696e67206e616d652c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429",
                  "id": 2320,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "620:69:4",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866",
                    "typeString": "literal_string \"EIP712Domain(string name,uint256 chainId,address verifyingContract)\""
                  },
                  "value": "EIP712Domain(string name,uint256 chainId,address verifyingContract)"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866",
                    "typeString": "literal_string \"EIP712Domain(string name,uint256 chainId,address verifyingContract)\""
                  }
                ],
                "id": 2319,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": -8,
                "src": "606:9:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 2321,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "606:87:4",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "documentation": {
              "id": 2323,
              "nodeType": "StructuredDocumentation",
              "src": "697:79:4",
              "text": "@notice The EIP-712 typehash for the delegation struct used by the contract"
            },
            "functionSelector": "e7a324dc",
            "id": 2328,
            "mutability": "constant",
            "name": "DELEGATION_TYPEHASH",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 3347,
            "src": "778:118:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 2324,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "778:7:4",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "44656c65676174696f6e28616464726573732064656c65676174652c75696e74323536206e6f6e63652c75696e743235362065787069727929",
                  "id": 2326,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "836:59:4",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_ff41620983935eb4d4a3c7384a066ca8c1d10cef9a5eca9eb97ca735cd14a755",
                    "typeString": "literal_string \"Delegation(address delegate,uint256 nonce,uint256 expiry)\""
                  },
                  "value": "Delegation(address delegate,uint256 nonce,uint256 expiry)"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_ff41620983935eb4d4a3c7384a066ca8c1d10cef9a5eca9eb97ca735cd14a755",
                    "typeString": "literal_string \"Delegation(address delegate,uint256 nonce,uint256 expiry)\""
                  }
                ],
                "id": 2325,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": -8,
                "src": "826:9:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 2327,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "826:70:4",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "canonicalName": "GReputation.BlockchainState",
            "id": 2341,
            "members": [
              {
                "constant": false,
                "id": 2330,
                "mutability": "mutable",
                "name": "stateHash",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 2341,
                "src": "1221:17:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 2329,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1221:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2332,
                "mutability": "mutable",
                "name": "hashType",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 2341,
                "src": "1242:16:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2331,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1242:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2334,
                "mutability": "mutable",
                "name": "totalSupply",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 2341,
                "src": "1262:19:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2333,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1262:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2336,
                "mutability": "mutable",
                "name": "blockNumber",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 2341,
                "src": "1285:19:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2335,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1285:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2340,
                "mutability": "mutable",
                "name": "__reserevedSpace",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 2341,
                "src": "1308:27:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_uint256_$5_storage_ptr",
                  "typeString": "uint256[5]"
                },
                "typeName": {
                  "baseType": {
                    "id": 2337,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1308:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2339,
                  "length": {
                    "argumentTypes": null,
                    "hexValue": "35",
                    "id": 2338,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1316:1:4",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_5_by_1",
                      "typeString": "int_const 5"
                    },
                    "value": "5"
                  },
                  "nodeType": "ArrayTypeName",
                  "src": "1308:10:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$5_storage_ptr",
                    "typeString": "uint256[5]"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "BlockchainState",
            "nodeType": "StructDefinition",
            "scope": 3347,
            "src": "1194:145:4",
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 2342,
              "nodeType": "StructuredDocumentation",
              "src": "1342:66:4",
              "text": "@notice A record of states for signing / validating signatures"
            },
            "functionSelector": "7ecebe00",
            "id": 2346,
            "mutability": "mutable",
            "name": "nonces",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 3347,
            "src": "1410:41:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 2345,
              "keyType": {
                "id": 2343,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1418:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1410:27:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 2344,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1429:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 2347,
              "nodeType": "StructuredDocumentation",
              "src": "1455:61:4",
              "text": "@notice mapping from blockchain id hash to list of states"
            },
            "functionSelector": "f0e18a43",
            "id": 2352,
            "mutability": "mutable",
            "name": "blockchainStates",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 3347,
            "src": "1518:61:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_$",
              "typeString": "mapping(bytes32 => struct GReputation.BlockchainState[])"
            },
            "typeName": {
              "id": 2351,
              "keyType": {
                "id": 2348,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1526:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "1518:37:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_$",
                "typeString": "mapping(bytes32 => struct GReputation.BlockchainState[])"
              },
              "valueType": {
                "baseType": {
                  "contractScope": null,
                  "id": 2349,
                  "name": "BlockchainState",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 2341,
                  "src": "1537:15:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                    "typeString": "struct GReputation.BlockchainState"
                  }
                },
                "id": 2350,
                "length": null,
                "nodeType": "ArrayTypeName",
                "src": "1537:17:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                  "typeString": "struct GReputation.BlockchainState[]"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 2353,
              "nodeType": "StructuredDocumentation",
              "src": "1583:97:4",
              "text": "@notice mapping from stateHash to the user balance can be >0 only after supplying state proof"
            },
            "functionSelector": "22ea1d80",
            "id": 2359,
            "mutability": "mutable",
            "name": "stateHashBalances",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 3347,
            "src": "1682:72:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(bytes32 => mapping(address => uint256))"
            },
            "typeName": {
              "id": 2358,
              "keyType": {
                "id": 2354,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1690:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "1682:47:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(bytes32 => mapping(address => uint256))"
              },
              "valueType": {
                "id": 2357,
                "keyType": {
                  "id": 2355,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1709:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "1701:27:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "valueType": {
                  "id": 2356,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1720:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 2360,
              "nodeType": "StructuredDocumentation",
              "src": "1758:69:4",
              "text": "@notice list of blockchains having a statehash for easy iteration"
            },
            "functionSelector": "6c087d90",
            "id": 2363,
            "mutability": "mutable",
            "name": "activeBlockchains",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 3347,
            "src": "1829:34:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
              "typeString": "bytes32[]"
            },
            "typeName": {
              "baseType": {
                "id": 2361,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1829:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "id": 2362,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "1829:9:4",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                "typeString": "bytes32[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 2364,
              "nodeType": "StructuredDocumentation",
              "src": "1867:40:4",
              "text": "@notice keep map of user -> delegate"
            },
            "functionSelector": "587cde1e",
            "id": 2368,
            "mutability": "mutable",
            "name": "delegates",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 3347,
            "src": "1909:44:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
              "typeString": "mapping(address => address)"
            },
            "typeName": {
              "id": 2367,
              "keyType": {
                "id": 2365,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1917:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1909:27:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                "typeString": "mapping(address => address)"
              },
              "valueType": {
                "id": 2366,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1928:7:4",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 2369,
              "nodeType": "StructuredDocumentation",
              "src": "1957:94:4",
              "text": "@notice map of user non delegatd + delegated votes to user. this is used for actual voting"
            },
            "functionSelector": "2337f7b6",
            "id": 2374,
            "mutability": "mutable",
            "name": "activeVotes",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 3347,
            "src": "2053:48:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
              "typeString": "mapping(address => uint256[])"
            },
            "typeName": {
              "id": 2373,
              "keyType": {
                "id": 2370,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2061:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2053:29:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
                "typeString": "mapping(address => uint256[])"
              },
              "valueType": {
                "baseType": {
                  "id": 2371,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2072:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "id": 2372,
                "length": null,
                "nodeType": "ArrayTypeName",
                "src": "2072:9:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                  "typeString": "uint256[]"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 2375,
              "nodeType": "StructuredDocumentation",
              "src": "2105:81:4",
              "text": "@notice An event thats emitted when a delegate account's vote balance changes"
            },
            "id": 2385,
            "name": "DelegateVotesChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2384,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2377,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "delegate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2385,
                  "src": "2218:24:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2376,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2218:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2379,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "delegator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2385,
                  "src": "2246:25:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2378,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2246:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2381,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "previousBalance",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2385,
                  "src": "2275:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2380,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2275:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2383,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newBalance",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2385,
                  "src": "2302:18:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2382,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2302:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2214:109:4"
            },
            "src": "2188:136:4"
          },
          {
            "baseFunctions": [
              3461
            ],
            "body": {
              "id": 2445,
              "nodeType": "Block",
              "src": "2637:333:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2399,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2388,
                        "src": "2653:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2400,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2390,
                        "src": "2660:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2396,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "2641:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GReputation_$3347",
                          "typeString": "contract super GReputation"
                        }
                      },
                      "id": 2398,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3461,
                      "src": "2641:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) returns (uint256)"
                      }
                    },
                    "id": 2401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2641:27:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2402,
                  "nodeType": "ExpressionStatement",
                  "src": "2641:27:4"
                },
                {
                  "assignments": [
                    2404
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2404,
                      "mutability": "mutable",
                      "name": "delegator",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2445,
                      "src": "2672:17:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2403,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2672:7:4",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2408,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2405,
                      "name": "delegates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2368,
                      "src": "2692:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                        "typeString": "mapping(address => address)"
                      }
                    },
                    "id": 2407,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2406,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2388,
                      "src": "2702:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2692:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2672:36:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2419,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2409,
                      "name": "delegator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2404,
                      "src": "2712:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 2415,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2410,
                          "name": "delegator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2404,
                          "src": "2724:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 2413,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2745:1:4",
                              "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": 2412,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2737:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 2411,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2737:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 2414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2737:10:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2724:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "id": 2417,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2388,
                        "src": "2762:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 2418,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "2724:43:4",
                      "trueExpression": {
                        "argumentTypes": null,
                        "id": 2416,
                        "name": "delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2404,
                        "src": "2750:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2712:55:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2420,
                  "nodeType": "ExpressionStatement",
                  "src": "2712:55:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2425,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2421,
                        "name": "delegates",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2368,
                        "src": "2771:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 2423,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2422,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2388,
                        "src": "2781:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2771:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2424,
                      "name": "delegator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2404,
                      "src": "2790:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2771:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2426,
                  "nodeType": "ExpressionStatement",
                  "src": "2771:28:4"
                },
                {
                  "assignments": [
                    2428
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2428,
                      "mutability": "mutable",
                      "name": "previousVotes",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2445,
                      "src": "2803:21:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2427,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2803:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2432,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2430,
                        "name": "delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2404,
                        "src": "2836:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2429,
                      "name": "getVotes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2699,
                      "src": "2827:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 2431,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2827:19:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2803:43:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2434,
                        "name": "delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2404,
                        "src": "2876:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2435,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2388,
                        "src": "2890:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2436,
                        "name": "previousVotes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2428,
                        "src": "2900:13:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2439,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2390,
                            "src": "2936:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2437,
                            "name": "previousVotes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2428,
                            "src": "2918:13:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2438,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7973,
                          "src": "2918:17:4",
                          "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": 2440,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2918:26:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2433,
                      "name": "_updateDelegateVotes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3296,
                      "src": "2851:20:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256)"
                      }
                    },
                    "id": 2441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2851:97:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2442,
                  "nodeType": "ExpressionStatement",
                  "src": "2851:97:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2443,
                    "name": "_amount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2390,
                    "src": "2959:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2395,
                  "id": 2444,
                  "nodeType": "Return",
                  "src": "2952:14:4"
                }
              ]
            },
            "documentation": {
              "id": 2386,
              "nodeType": "StructuredDocumentation",
              "src": "2327:218:4",
              "text": "@notice internal function that overrides Reputation.sol with consideration to delegation\n @param _user the address to mint for\n @param _amount the amount of rep to mint\n @return the actual amount minted"
            },
            "id": 2446,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 2392,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2607:8:4"
            },
            "parameters": {
              "id": 2391,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2388,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2446,
                  "src": "2562:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2387,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2562:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2390,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2446,
                  "src": "2577:15:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2389,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2577:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2561:32:4"
            },
            "returnParameters": {
              "id": 2395,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2394,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2446,
                  "src": "2627:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2393,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2627:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2626:9:4"
            },
            "scope": 3347,
            "src": "2547:423:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              3538
            ],
            "body": {
              "id": 2507,
              "nodeType": "Block",
              "src": "3284:367:4",
              "statements": [
                {
                  "assignments": [
                    2458
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2458,
                      "mutability": "mutable",
                      "name": "amountBurned",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2507,
                      "src": "3288:20:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2457,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3288:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2464,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2461,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2449,
                        "src": "3323:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2462,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2451,
                        "src": "3330:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2459,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "3311:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GReputation_$3347",
                          "typeString": "contract super GReputation"
                        }
                      },
                      "id": 2460,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3538,
                      "src": "3311:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) returns (uint256)"
                      }
                    },
                    "id": 2463,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3311:27:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3288:50:4"
                },
                {
                  "assignments": [
                    2466
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2466,
                      "mutability": "mutable",
                      "name": "delegator",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2507,
                      "src": "3342:17:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2465,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3342:7:4",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2470,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2467,
                      "name": "delegates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2368,
                      "src": "3362:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                        "typeString": "mapping(address => address)"
                      }
                    },
                    "id": 2469,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2468,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2449,
                      "src": "3372:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3362:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3342:36:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2471,
                      "name": "delegator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2466,
                      "src": "3382:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 2477,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2472,
                          "name": "delegator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2466,
                          "src": "3394:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 2475,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3415:1:4",
                              "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": 2474,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3407:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 2473,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3407:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 2476,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3407:10:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3394:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "id": 2479,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2449,
                        "src": "3432:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 2480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "3394:43:4",
                      "trueExpression": {
                        "argumentTypes": null,
                        "id": 2478,
                        "name": "delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2466,
                        "src": "3420:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3382:55:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2482,
                  "nodeType": "ExpressionStatement",
                  "src": "3382:55:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2483,
                        "name": "delegates",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2368,
                        "src": "3441:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 2485,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2484,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2449,
                        "src": "3451:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3441:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2486,
                      "name": "delegator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2466,
                      "src": "3460:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3441:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2488,
                  "nodeType": "ExpressionStatement",
                  "src": "3441:28:4"
                },
                {
                  "assignments": [
                    2490
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2490,
                      "mutability": "mutable",
                      "name": "previousVotes",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2507,
                      "src": "3473:21:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2489,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3473:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2494,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2492,
                        "name": "delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2466,
                        "src": "3506:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2491,
                      "name": "getVotes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2699,
                      "src": "3497:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 2493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3497:19:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3473:43:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2496,
                        "name": "delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2466,
                        "src": "3546:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2497,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2449,
                        "src": "3560:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2498,
                        "name": "previousVotes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2490,
                        "src": "3570:13:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2501,
                            "name": "amountBurned",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2458,
                            "src": "3606:12:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2499,
                            "name": "previousVotes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2490,
                            "src": "3588:13:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2500,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sub",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7990,
                          "src": "3588:17:4",
                          "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": 2502,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3588:31:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2495,
                      "name": "_updateDelegateVotes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3296,
                      "src": "3521:20:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256)"
                      }
                    },
                    "id": 2503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3521:102:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2504,
                  "nodeType": "ExpressionStatement",
                  "src": "3521:102:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2505,
                    "name": "amountBurned",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2458,
                    "src": "3635:12:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2456,
                  "id": 2506,
                  "nodeType": "Return",
                  "src": "3628:19:4"
                }
              ]
            },
            "documentation": {
              "id": 2447,
              "nodeType": "StructuredDocumentation",
              "src": "2973:219:4",
              "text": "@notice internal function that overrides Reputation.sol with consideration to delegation\n @param _user the address to burn from\n @param _amount the amount of rep to mint\n @return the actual amount burned"
            },
            "id": 2508,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_burn",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 2453,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3254:8:4"
            },
            "parameters": {
              "id": 2452,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2449,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2508,
                  "src": "3209:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2448,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3209:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2451,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2508,
                  "src": "3224:15:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2450,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3224:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3208:32:4"
            },
            "returnParameters": {
              "id": 2456,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2455,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2508,
                  "src": "3274:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2454,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3274:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3273:9:4"
            },
            "scope": 3347,
            "src": "3194:457:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2629,
              "nodeType": "Block",
              "src": "4046:786:4",
              "statements": [
                {
                  "assignments": [
                    2521
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2521,
                      "mutability": "mutable",
                      "name": "idHash",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2629,
                      "src": "4050:14:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2520,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "4050:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2528,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2525,
                            "name": "_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2511,
                            "src": "4083:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "id": 2524,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4077:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": {
                            "id": 2523,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "4077:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 2526,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4077:10:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2522,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "4067:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 2527,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4067:21:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4050:38:4"
                },
                {
                  "assignments": [
                    2530
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2530,
                      "mutability": "mutable",
                      "name": "isRootState",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2629,
                      "src": "4164:16:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 2529,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "4164:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2539,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 2538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2531,
                      "name": "idHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2521,
                      "src": "4183:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "726f6f745374617465",
                              "id": 2535,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4209:11:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_0df2f1ec68f7ac2e4205051c96e8cfd7b54c89c139839c13d3d59548ae1488a1",
                                "typeString": "literal_string \"rootState\""
                              },
                              "value": "rootState"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_0df2f1ec68f7ac2e4205051c96e8cfd7b54c89c139839c13d3d59548ae1488a1",
                                "typeString": "literal_string \"rootState\""
                              }
                            ],
                            "id": 2534,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4203:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 2533,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "4203:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 2536,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4203:18:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 2532,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "4193:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 2537,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4193:29:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4183:39:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4164:58:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 2550,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2542,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "4238:12:4",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 2541,
                            "name": "isRootState",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2530,
                            "src": "4239:11:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2549,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2545,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "4274:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 2546,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "number",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4274:12:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 2543,
                                "name": "super",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -25,
                                "src": "4254:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_super$_GReputation_$3347",
                                  "typeString": "contract super GReputation"
                                }
                              },
                              "id": 2544,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "totalSupplyAt",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3661,
                              "src": "4254:19:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256) view returns (uint256)"
                              }
                            },
                            "id": 2547,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4254:33:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2548,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4291:1:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "4254:38:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "4238:54:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "726f6f74537461746520616c72656164792063726561746564",
                        "id": 2551,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4297:27:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_79983b43c21246812785f3366cf04661d7b80dfaa095185c600f598523aac60b",
                          "typeString": "literal_string \"rootState already created\""
                        },
                        "value": "rootState already created"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_79983b43c21246812785f3366cf04661d7b80dfaa095185c600f598523aac60b",
                          "typeString": "literal_string \"rootState already created\""
                        }
                      ],
                      "id": 2540,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4226:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4226:102:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2553,
                  "nodeType": "ExpressionStatement",
                  "src": "4226:102:4"
                },
                {
                  "assignments": [
                    2555
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2555,
                      "mutability": "mutable",
                      "name": "i",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2629,
                      "src": "4333:9:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2554,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4333:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2557,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 2556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4345:1:4",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4333:13:4"
                },
                {
                  "body": {
                    "id": 2575,
                    "nodeType": "Block",
                    "src": "4408:51:4",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 2572,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2568,
                              "name": "activeBlockchains",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2363,
                              "src": "4417:17:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                "typeString": "bytes32[] storage ref"
                              }
                            },
                            "id": 2570,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2569,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2555,
                              "src": "4435:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4417:20:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2571,
                            "name": "idHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2521,
                            "src": "4441:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "4417:30:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2574,
                        "nodeType": "IfStatement",
                        "src": "4413:41:4",
                        "trueBody": {
                          "id": 2573,
                          "nodeType": "Break",
                          "src": "4449:5:4"
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2564,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2559,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "4357:12:4",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 2558,
                        "name": "isRootState",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2530,
                        "src": "4358:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2563,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2560,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2555,
                        "src": "4373:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2561,
                          "name": "activeBlockchains",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2363,
                          "src": "4377:17:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                            "typeString": "bytes32[] storage ref"
                          }
                        },
                        "id": 2562,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4377:24:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "4373:28:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4357:44:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2576,
                  "initializationExpression": null,
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2566,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4403:3:4",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 2565,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2555,
                        "src": "4403:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2567,
                    "nodeType": "ExpressionStatement",
                    "src": "4403:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "4350:109:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2583,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2578,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "4489:12:4",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 2577,
                        "name": "isRootState",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2530,
                        "src": "4490:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2582,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2579,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2555,
                        "src": "4505:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2580,
                          "name": "activeBlockchains",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2363,
                          "src": "4510:17:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                            "typeString": "bytes32[] storage ref"
                          }
                        },
                        "id": 2581,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4510:24:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "4505:29:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4489:45:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2591,
                  "nodeType": "IfStatement",
                  "src": "4485:91:4",
                  "trueBody": {
                    "id": 2590,
                    "nodeType": "Block",
                    "src": "4536:40:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2587,
                              "name": "idHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2521,
                              "src": "4564:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2584,
                              "name": "activeBlockchains",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2363,
                              "src": "4541:17:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                "typeString": "bytes32[] storage ref"
                              }
                            },
                            "id": 2586,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "4541:22:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_bytes32_$returns$__$",
                              "typeString": "function (bytes32)"
                            }
                          },
                          "id": 2588,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4541:30:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2589,
                        "nodeType": "ExpressionStatement",
                        "src": "4541:30:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 2592,
                    "name": "isRootState",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2530,
                    "src": "4584:11:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2599,
                  "nodeType": "IfStatement",
                  "src": "4580:77:4",
                  "trueBody": {
                    "id": 2598,
                    "nodeType": "Block",
                    "src": "4597:60:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2594,
                              "name": "totalSupplyHistory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3379,
                              "src": "4619:18:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                                "typeString": "uint256[] storage ref"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2595,
                              "name": "_totalSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2515,
                              "src": "4639:12:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                                "typeString": "uint256[] storage ref"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2593,
                            "name": "updateValueAtNow",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3858,
                            "src": "4602:16:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256[] storage pointer,uint256)"
                            }
                          },
                          "id": 2596,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4602:50:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2597,
                        "nodeType": "ExpressionStatement",
                        "src": "4602:50:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2601
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2601,
                      "mutability": "mutable",
                      "name": "state",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2629,
                      "src": "4661:28:4",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_BlockchainState_$2341_memory_ptr",
                        "typeString": "struct GReputation.BlockchainState"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2600,
                        "name": "BlockchainState",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2341,
                        "src": "4661:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                          "typeString": "struct GReputation.BlockchainState"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2602,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4661:28:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2603,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2601,
                        "src": "4693:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BlockchainState_$2341_memory_ptr",
                          "typeString": "struct GReputation.BlockchainState memory"
                        }
                      },
                      "id": 2605,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "stateHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2330,
                      "src": "4693:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2606,
                      "name": "_hash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2513,
                      "src": "4711:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4693:23:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 2608,
                  "nodeType": "ExpressionStatement",
                  "src": "4693:23:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2613,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2609,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2601,
                        "src": "4720:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BlockchainState_$2341_memory_ptr",
                          "typeString": "struct GReputation.BlockchainState memory"
                        }
                      },
                      "id": 2611,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2334,
                      "src": "4720:17:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2612,
                      "name": "_totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2515,
                      "src": "4740:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4720:32:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2614,
                  "nodeType": "ExpressionStatement",
                  "src": "4720:32:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2620,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2615,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2601,
                        "src": "4756:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BlockchainState_$2341_memory_ptr",
                          "typeString": "struct GReputation.BlockchainState memory"
                        }
                      },
                      "id": 2617,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "blockNumber",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2336,
                      "src": "4756:17:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2618,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "4776:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 2619,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "number",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4776:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4756:32:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2621,
                  "nodeType": "ExpressionStatement",
                  "src": "4756:32:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2626,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2601,
                        "src": "4822:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BlockchainState_$2341_memory_ptr",
                          "typeString": "struct GReputation.BlockchainState memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_BlockchainState_$2341_memory_ptr",
                          "typeString": "struct GReputation.BlockchainState memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2622,
                          "name": "blockchainStates",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2352,
                          "src": "4792:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_$",
                            "typeString": "mapping(bytes32 => struct GReputation.BlockchainState storage ref[] storage ref)"
                          }
                        },
                        "id": 2624,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2623,
                          "name": "idHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2521,
                          "src": "4809:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4792:24:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage",
                          "typeString": "struct GReputation.BlockchainState storage ref[] storage ref"
                        }
                      },
                      "id": 2625,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4792:29:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_BlockchainState_$2341_storage_$returns$__$",
                        "typeString": "function (struct GReputation.BlockchainState storage ref)"
                      }
                    },
                    "id": 2627,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4792:36:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2628,
                  "nodeType": "ExpressionStatement",
                  "src": "4792:36:4"
                }
              ]
            },
            "documentation": {
              "id": 2509,
              "nodeType": "StructuredDocumentation",
              "src": "3654:276:4",
              "text": "@notice sets the state hash of a blockchain, can only be called by owner\n @param _id the string name of the blockchain (will be hashed to produce byte32 id)\n @param _hash the state hash\n @param _totalSupply total supply of reputation on the specific blockchain"
            },
            "functionSelector": "17aeda02",
            "id": 2630,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2518,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2517,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7818,
                  "src": "4036:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4036:9:4"
              }
            ],
            "name": "setBlockchainStateHash",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2511,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2630,
                  "src": "3967:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2510,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3967:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2513,
                  "mutability": "mutable",
                  "name": "_hash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2630,
                  "src": "3988:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2512,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3988:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2515,
                  "mutability": "mutable",
                  "name": "_totalSupply",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2630,
                  "src": "4005:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2514,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4005:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3963:65:4"
            },
            "returnParameters": {
              "id": 2519,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4046:0:4"
            },
            "scope": 3347,
            "src": "3932:900:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2682,
              "nodeType": "Block",
              "src": "5280:336:4",
              "statements": [
                {
                  "assignments": [
                    2643
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2643,
                      "mutability": "mutable",
                      "name": "startingBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2682,
                      "src": "5284:23:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2642,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5284:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2650,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2645,
                          "name": "activeVotes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2374,
                          "src": "5321:11:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
                            "typeString": "mapping(address => uint256[] storage ref)"
                          }
                        },
                        "id": 2647,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2646,
                          "name": "_user",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2633,
                          "src": "5333:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5321:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                          "typeString": "uint256[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2648,
                        "name": "_blockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2637,
                        "src": "5341:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                          "typeString": "uint256[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2644,
                      "name": "getValueAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3770,
                      "src": "5310:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256[] storage pointer,uint256) view returns (uint256)"
                      }
                    },
                    "id": 2649,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5310:44:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5284:70:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 2651,
                    "name": "_global",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2635,
                    "src": "5363:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2679,
                  "nodeType": "IfStatement",
                  "src": "5359:227:4",
                  "trueBody": {
                    "id": 2678,
                    "nodeType": "Block",
                    "src": "5372:214:4",
                    "statements": [
                      {
                        "body": {
                          "id": 2676,
                          "nodeType": "Block",
                          "src": "5432:150:4",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2674,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2663,
                                  "name": "startingBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2643,
                                  "src": "5438:15:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 2667,
                                            "name": "activeBlockchains",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2363,
                                            "src": "5510:17:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                              "typeString": "bytes32[] storage ref"
                                            }
                                          },
                                          "id": 2669,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 2668,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2653,
                                            "src": "5528:1:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "5510:20:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 2670,
                                          "name": "_user",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2633,
                                          "src": "5538:5:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 2671,
                                          "name": "_blockNumber",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2637,
                                          "src": "5551:12:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          },
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 2666,
                                        "name": "getVotesAtBlockchain",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2864,
                                        "src": "5482:20:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                                          "typeString": "function (bytes32,address,uint256) view returns (uint256)"
                                        }
                                      },
                                      "id": 2672,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5482:88:4",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2664,
                                      "name": "startingBalance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2643,
                                      "src": "5456:15:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2665,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7973,
                                    "src": "5456:19:4",
                                    "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": 2673,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5456:120:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5438:138:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2675,
                              "nodeType": "ExpressionStatement",
                              "src": "5438:138:4"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2659,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2656,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2653,
                            "src": "5397:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2657,
                              "name": "activeBlockchains",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2363,
                              "src": "5401:17:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                "typeString": "bytes32[] storage ref"
                              }
                            },
                            "id": 2658,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "5401:24:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5397:28:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2677,
                        "initializationExpression": {
                          "assignments": [
                            2653
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 2653,
                              "mutability": "mutable",
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "overrides": null,
                              "scope": 2677,
                              "src": "5382:9:4",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 2652,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "5382:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 2655,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2654,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5394:1:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "5382:13:4"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 2661,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "5427:3:4",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 2660,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2653,
                              "src": "5427:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2662,
                          "nodeType": "ExpressionStatement",
                          "src": "5427:3:4"
                        },
                        "nodeType": "ForStatement",
                        "src": "5377:205:4"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2680,
                    "name": "startingBalance",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2643,
                    "src": "5597:15:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2641,
                  "id": 2681,
                  "nodeType": "Return",
                  "src": "5590:22:4"
                }
              ]
            },
            "documentation": {
              "id": 2631,
              "nodeType": "StructuredDocumentation",
              "src": "4835:333:4",
              "text": "@notice get the number of active votes a user holds after delegation (vs the basic balance of reputation he holds)\n @param _user the user to get active votes for\n @param _global wether to include reputation from other blockchains\n @param _blockNumber get votes state at specific block\n @return the number of votes"
            },
            "functionSelector": "a265ba46",
            "id": 2683,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVotesAt",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2638,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2633,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2683,
                  "src": "5193:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2632,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5193:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2635,
                  "mutability": "mutable",
                  "name": "_global",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2683,
                  "src": "5210:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2634,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5210:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2637,
                  "mutability": "mutable",
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2683,
                  "src": "5226:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2636,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5226:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5189:60:4"
            },
            "returnParameters": {
              "id": 2641,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2640,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2683,
                  "src": "5271:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2639,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5271:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5270:9:4"
            },
            "scope": 3347,
            "src": "5170:446:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2698,
              "nodeType": "Block",
              "src": "5851:52:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2692,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2686,
                        "src": "5873:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 2693,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5880:4:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2694,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "5886:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 2695,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5886:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2691,
                      "name": "getVotesAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2683,
                        2716
                      ],
                      "referencedDeclaration": 2683,
                      "src": "5862:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,bool,uint256) view returns (uint256)"
                      }
                    },
                    "id": 2696,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5862:37:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2690,
                  "id": 2697,
                  "nodeType": "Return",
                  "src": "5855:44:4"
                }
              ]
            },
            "documentation": {
              "id": 2684,
              "nodeType": "StructuredDocumentation",
              "src": "5619:167:4",
              "text": " @notice returns aggregated active votes in all blockchains and delegated\n @param _user the user to get active votes for\n @return the number of votes"
            },
            "functionSelector": "9ab24eb0",
            "id": 2699,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVotes",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2687,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2686,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2699,
                  "src": "5806:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2685,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5806:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5805:15:4"
            },
            "returnParameters": {
              "id": 2690,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2689,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2699,
                  "src": "5842:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2688,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5842:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5841:9:4"
            },
            "scope": 3347,
            "src": "5788:115:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2715,
              "nodeType": "Block",
              "src": "6241:52:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2710,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2702,
                        "src": "6263:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 2711,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6270:4:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2712,
                        "name": "_blockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2704,
                        "src": "6276:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2709,
                      "name": "getVotesAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2683,
                        2716
                      ],
                      "referencedDeclaration": 2683,
                      "src": "6252:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,bool,uint256) view returns (uint256)"
                      }
                    },
                    "id": 2713,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6252:37:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2708,
                  "id": 2714,
                  "nodeType": "Return",
                  "src": "6245:44:4"
                }
              ]
            },
            "documentation": {
              "id": 2700,
              "nodeType": "StructuredDocumentation",
              "src": "5906:239:4",
              "text": " @notice returns aggregated active votes in all blockchains and delegated at specific block\n @param _user user to get active votes for\n @param _blockNumber get votes state at specific block\n @return the number of votes"
            },
            "functionSelector": "9324bffa",
            "id": 2716,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVotesAt",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2705,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2702,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2716,
                  "src": "6167:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2701,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6167:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2704,
                  "mutability": "mutable",
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2716,
                  "src": "6182:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2703,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6182:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6166:37:4"
            },
            "returnParameters": {
              "id": 2708,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2707,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2716,
                  "src": "6231:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2706,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6231:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6230:9:4"
            },
            "scope": 3347,
            "src": "6147:146:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2729,
              "nodeType": "Block",
              "src": "6555:48:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2726,
                        "name": "_blockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2719,
                        "src": "6586:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2724,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "6566:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GReputation_$3347",
                          "typeString": "contract super GReputation"
                        }
                      },
                      "id": 2725,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupplyAt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3661,
                      "src": "6566:19:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 2727,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6566:33:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2723,
                  "id": 2728,
                  "nodeType": "Return",
                  "src": "6559:40:4"
                }
              ]
            },
            "documentation": {
              "id": 2717,
              "nodeType": "StructuredDocumentation",
              "src": "6296:172:4",
              "text": " @notice returns total supply in current blockchain (super.balanceOfAt)\n @param _blockNumber get total supply at specific block\n @return the totaly supply"
            },
            "functionSelector": "f2a035e2",
            "id": 2730,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupplyLocal",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2720,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2719,
                  "mutability": "mutable",
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2730,
                  "src": "6496:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2718,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6496:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6495:22:4"
            },
            "returnParameters": {
              "id": 2723,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2722,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2730,
                  "src": "6545:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2721,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6545:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6544:9:4"
            },
            "scope": 3347,
            "src": "6470:133:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              3661
            ],
            "body": {
              "id": 2773,
              "nodeType": "Block",
              "src": "6860:264:4",
              "statements": [
                {
                  "assignments": [
                    2740
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2740,
                      "mutability": "mutable",
                      "name": "startingSupply",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2773,
                      "src": "6864:22:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2739,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6864:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2745,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2743,
                        "name": "_blockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2733,
                        "src": "6909:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2741,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "6889:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GReputation_$3347",
                          "typeString": "contract super GReputation"
                        }
                      },
                      "id": 2742,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupplyAt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3661,
                      "src": "6889:19:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 2744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6889:33:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6864:58:4"
                },
                {
                  "body": {
                    "id": 2769,
                    "nodeType": "Block",
                    "src": "6981:115:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2767,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2757,
                            "name": "startingSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2740,
                            "src": "6986:14:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 2761,
                                      "name": "activeBlockchains",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2363,
                                      "src": "7051:17:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                        "typeString": "bytes32[] storage ref"
                                      }
                                    },
                                    "id": 2763,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 2762,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2747,
                                      "src": "7069:1:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "7051:20:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 2764,
                                    "name": "_blockNumber",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2733,
                                    "src": "7073:12:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2760,
                                  "name": "totalSupplyAtBlockchain",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2940,
                                  "src": "7027:23:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (bytes32,uint256) view returns (uint256)"
                                  }
                                },
                                "id": 2765,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7027:59:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 2758,
                                "name": "startingSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2740,
                                "src": "7003:14:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2759,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7973,
                              "src": "7003:18:4",
                              "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": 2766,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7003:88:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6986:105:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2768,
                        "nodeType": "ExpressionStatement",
                        "src": "6986:105:4"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2750,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2747,
                      "src": "6946:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2751,
                        "name": "activeBlockchains",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2363,
                        "src": "6950:17:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                          "typeString": "bytes32[] storage ref"
                        }
                      },
                      "id": 2752,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6950:24:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6946:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2770,
                  "initializationExpression": {
                    "assignments": [
                      2747
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 2747,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2770,
                        "src": "6931:9:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2746,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6931:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 2749,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2748,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6943:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "6931:13:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2755,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6976:3:4",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 2754,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2747,
                        "src": "6976:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2756,
                    "nodeType": "ExpressionStatement",
                    "src": "6976:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "6926:170:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2771,
                    "name": "startingSupply",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2740,
                    "src": "7106:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2738,
                  "id": 2772,
                  "nodeType": "Return",
                  "src": "7099:21:4"
                }
              ]
            },
            "documentation": {
              "id": 2731,
              "nodeType": "StructuredDocumentation",
              "src": "6606:159:4",
              "text": " @notice returns total supply in all blockchain aggregated\n @param _blockNumber get total supply at specific block\n @return the totaly supply"
            },
            "functionSelector": "981b24d0",
            "id": 2774,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupplyAt",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 2735,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6830:8:4"
            },
            "parameters": {
              "id": 2734,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2733,
                  "mutability": "mutable",
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2774,
                  "src": "6790:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2732,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6790:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6789:22:4"
            },
            "returnParameters": {
              "id": 2738,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2737,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2774,
                  "src": "6850:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2736,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6850:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6849:9:4"
            },
            "scope": 3347,
            "src": "6767:357:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2863,
              "nodeType": "Block",
              "src": "7546:380:4",
              "statements": [
                {
                  "assignments": [
                    2789
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2789,
                      "mutability": "mutable",
                      "name": "states",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2863,
                      "src": "7550:32:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                        "typeString": "struct GReputation.BlockchainState[]"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 2787,
                          "name": "BlockchainState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2341,
                          "src": "7550:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                            "typeString": "struct GReputation.BlockchainState"
                          }
                        },
                        "id": 2788,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "7550:17:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                          "typeString": "struct GReputation.BlockchainState[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2793,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2790,
                      "name": "blockchainStates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2352,
                      "src": "7585:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_$",
                        "typeString": "mapping(bytes32 => struct GReputation.BlockchainState storage ref[] storage ref)"
                      }
                    },
                    "id": 2792,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2791,
                      "name": "_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2777,
                      "src": "7602:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7585:21:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage",
                      "typeString": "struct GReputation.BlockchainState storage ref[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7550:56:4"
                },
                {
                  "assignments": [
                    2795
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2795,
                      "mutability": "mutable",
                      "name": "i",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2863,
                      "src": "7610:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "typeName": {
                        "id": 2794,
                        "name": "int256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7610:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2801,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2798,
                          "name": "states",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2789,
                          "src": "7628:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                            "typeString": "struct GReputation.BlockchainState storage ref[] storage pointer"
                          }
                        },
                        "id": 2799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7628:13:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2797,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "7621:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_int256_$",
                        "typeString": "type(int256)"
                      },
                      "typeName": {
                        "id": 2796,
                        "name": "int256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7621:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 2800,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7621:21:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7610:32:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 2804,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2802,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2795,
                      "src": "7651:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2803,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7656:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7651:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2807,
                  "nodeType": "IfStatement",
                  "src": "7647:20:4",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2805,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7666:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 2785,
                    "id": 2806,
                    "nodeType": "Return",
                    "src": "7659:8:4"
                  }
                },
                {
                  "assignments": [
                    2809
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2809,
                      "mutability": "mutable",
                      "name": "state",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2863,
                      "src": "7671:29:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                        "typeString": "struct GReputation.BlockchainState"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2808,
                        "name": "BlockchainState",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2341,
                        "src": "7671:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                          "typeString": "struct GReputation.BlockchainState"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2818,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2810,
                      "name": "states",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2789,
                      "src": "7703:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                        "typeString": "struct GReputation.BlockchainState storage ref[] storage pointer"
                      }
                    },
                    "id": 2817,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 2815,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2813,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2795,
                            "src": "7718:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 2814,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7722:1:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "7718:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        ],
                        "id": 2812,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7710:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 2811,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7710:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 2816,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7710:14:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7703:22:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_BlockchainState_$2341_storage",
                      "typeString": "struct GReputation.BlockchainState storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7671:54:4"
                },
                {
                  "body": {
                    "id": 2848,
                    "nodeType": "Block",
                    "src": "7758:89:4",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2834,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2831,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2809,
                              "src": "7767:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                                "typeString": "struct GReputation.BlockchainState storage pointer"
                              }
                            },
                            "id": 2832,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "blockNumber",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2336,
                            "src": "7767:17:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2833,
                            "name": "_blockNumber",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2781,
                            "src": "7788:12:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7767:33:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2836,
                        "nodeType": "IfStatement",
                        "src": "7763:44:4",
                        "trueBody": {
                          "id": 2835,
                          "nodeType": "Break",
                          "src": "7802:5:4"
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2846,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2837,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2809,
                            "src": "7812:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                              "typeString": "struct GReputation.BlockchainState storage pointer"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2838,
                              "name": "states",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2789,
                              "src": "7820:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                                "typeString": "struct GReputation.BlockchainState storage ref[] storage pointer"
                              }
                            },
                            "id": 2845,
                            "indexExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  },
                                  "id": 2843,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 2841,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2795,
                                    "src": "7835:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 2842,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7839:1:4",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "7835:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                ],
                                "id": 2840,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7827:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 2839,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7827:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 2844,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7827:14:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7820:22:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BlockchainState_$2341_storage",
                              "typeString": "struct GReputation.BlockchainState storage ref"
                            }
                          },
                          "src": "7812:30:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                            "typeString": "struct GReputation.BlockchainState storage pointer"
                          }
                        },
                        "id": 2847,
                        "nodeType": "ExpressionStatement",
                        "src": "7812:30:4"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 2827,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2825,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2795,
                      "src": "7745:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2826,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7750:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7745:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2849,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2823,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 2819,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2795,
                        "src": "7734:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "id": 2822,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2820,
                          "name": "i",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2795,
                          "src": "7738:1:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 2821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7742:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "7738:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "src": "7734:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "id": 2824,
                    "nodeType": "ExpressionStatement",
                    "src": "7734:9:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2829,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "--",
                      "prefix": false,
                      "src": "7753:3:4",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 2828,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2795,
                        "src": "7753:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "id": 2830,
                    "nodeType": "ExpressionStatement",
                    "src": "7753:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "7729:118:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 2852,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2850,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2795,
                      "src": "7854:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2851,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7858:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7854:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2855,
                  "nodeType": "IfStatement",
                  "src": "7850:19:4",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2853,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7868:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 2785,
                    "id": 2854,
                    "nodeType": "Return",
                    "src": "7861:8:4"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2856,
                        "name": "stateHashBalances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2359,
                        "src": "7881:17:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_uint256_$_$",
                          "typeString": "mapping(bytes32 => mapping(address => uint256))"
                        }
                      },
                      "id": 2859,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2857,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2809,
                          "src": "7899:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                            "typeString": "struct GReputation.BlockchainState storage pointer"
                          }
                        },
                        "id": 2858,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "stateHash",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2330,
                        "src": "7899:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "7881:34:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 2861,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2860,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2779,
                      "src": "7916:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7881:41:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2785,
                  "id": 2862,
                  "nodeType": "Return",
                  "src": "7874:48:4"
                }
              ]
            },
            "documentation": {
              "id": 2775,
              "nodeType": "StructuredDocumentation",
              "src": "7127:298:4",
              "text": "@notice get the number of active votes a user holds after delegation in specific blockchain\n @param _id the keccak hash of the blockchain string id\n @param _user the user to get active votes for\n @param _blockNumber get votes state at specific block\n @return the number of votes"
            },
            "functionSelector": "18a1851f",
            "id": 2864,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVotesAtBlockchain",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2782,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2777,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2864,
                  "src": "7460:11:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2776,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7460:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2779,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2864,
                  "src": "7475:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2778,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7475:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2781,
                  "mutability": "mutable",
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2864,
                  "src": "7492:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2780,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7492:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7456:59:4"
            },
            "returnParameters": {
              "id": 2785,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2784,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2864,
                  "src": "7537:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2783,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7537:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7536:9:4"
            },
            "scope": 3347,
            "src": "7427:499:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2939,
              "nodeType": "Block",
              "src": "8191:337:4",
              "statements": [
                {
                  "assignments": [
                    2877
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2877,
                      "mutability": "mutable",
                      "name": "states",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2939,
                      "src": "8195:32:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                        "typeString": "struct GReputation.BlockchainState[]"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 2875,
                          "name": "BlockchainState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2341,
                          "src": "8195:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                            "typeString": "struct GReputation.BlockchainState"
                          }
                        },
                        "id": 2876,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "8195:17:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                          "typeString": "struct GReputation.BlockchainState[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2881,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2878,
                      "name": "blockchainStates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2352,
                      "src": "8230:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_$",
                        "typeString": "mapping(bytes32 => struct GReputation.BlockchainState storage ref[] storage ref)"
                      }
                    },
                    "id": 2880,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2879,
                      "name": "_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2867,
                      "src": "8247:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8230:21:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage",
                      "typeString": "struct GReputation.BlockchainState storage ref[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8195:56:4"
                },
                {
                  "assignments": [
                    2883
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2883,
                      "mutability": "mutable",
                      "name": "i",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2939,
                      "src": "8255:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "typeName": {
                        "id": 2882,
                        "name": "int256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8255:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2884,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8255:8:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2888,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2885,
                        "name": "states",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2877,
                        "src": "8271:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                          "typeString": "struct GReputation.BlockchainState storage ref[] storage pointer"
                        }
                      },
                      "id": 2886,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "8271:13:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2887,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8288:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8271:18:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2891,
                  "nodeType": "IfStatement",
                  "src": "8267:32:4",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2889,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8298:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 2873,
                    "id": 2890,
                    "nodeType": "Return",
                    "src": "8291:8:4"
                  }
                },
                {
                  "body": {
                    "id": 2919,
                    "nodeType": "Block",
                    "src": "8352:67:4",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2916,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2908,
                                "name": "states",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2877,
                                "src": "8361:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                                  "typeString": "struct GReputation.BlockchainState storage ref[] storage pointer"
                                }
                              },
                              "id": 2913,
                              "indexExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2911,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2883,
                                    "src": "8376:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 2910,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "8368:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 2909,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8368:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 2912,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8368:10:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8361:18:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_BlockchainState_$2341_storage",
                                "typeString": "struct GReputation.BlockchainState storage ref"
                              }
                            },
                            "id": 2914,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "blockNumber",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2336,
                            "src": "8361:30:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2915,
                            "name": "_blockNumber",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2869,
                            "src": "8395:12:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8361:46:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2918,
                        "nodeType": "IfStatement",
                        "src": "8357:57:4",
                        "trueBody": {
                          "id": 2917,
                          "nodeType": "Break",
                          "src": "8409:5:4"
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 2904,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2902,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2883,
                      "src": "8339:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2903,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8344:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8339:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2920,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2900,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 2892,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2883,
                        "src": "8308:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2898,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2895,
                                "name": "states",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2877,
                                "src": "8319:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                                  "typeString": "struct GReputation.BlockchainState storage ref[] storage pointer"
                                }
                              },
                              "id": 2896,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8319:13:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 2897,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8335:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "8319:17:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 2894,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8312:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_int256_$",
                            "typeString": "type(int256)"
                          },
                          "typeName": {
                            "id": 2893,
                            "name": "int256",
                            "nodeType": "ElementaryTypeName",
                            "src": "8312:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 2899,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8312:25:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "src": "8308:29:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "id": 2901,
                    "nodeType": "ExpressionStatement",
                    "src": "8308:29:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2906,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "--",
                      "prefix": false,
                      "src": "8347:3:4",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 2905,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2883,
                        "src": "8347:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "id": 2907,
                    "nodeType": "ExpressionStatement",
                    "src": "8347:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "8303:116:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 2923,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2921,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2883,
                      "src": "8426:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2922,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8430:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8426:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2926,
                  "nodeType": "IfStatement",
                  "src": "8422:19:4",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2924,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8440:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 2873,
                    "id": 2925,
                    "nodeType": "Return",
                    "src": "8433:8:4"
                  }
                },
                {
                  "assignments": [
                    2928
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2928,
                      "mutability": "mutable",
                      "name": "state",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2939,
                      "src": "8446:29:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                        "typeString": "struct GReputation.BlockchainState"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2927,
                        "name": "BlockchainState",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2341,
                        "src": "8446:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                          "typeString": "struct GReputation.BlockchainState"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2935,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2929,
                      "name": "states",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2877,
                      "src": "8478:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                        "typeString": "struct GReputation.BlockchainState storage ref[] storage pointer"
                      }
                    },
                    "id": 2934,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2932,
                          "name": "i",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2883,
                          "src": "8493:1:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        ],
                        "id": 2931,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8485:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 2930,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8485:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 2933,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8485:10:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8478:18:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_BlockchainState_$2341_storage",
                      "typeString": "struct GReputation.BlockchainState storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8446:50:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2936,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2928,
                      "src": "8507:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                        "typeString": "struct GReputation.BlockchainState storage pointer"
                      }
                    },
                    "id": 2937,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "totalSupply",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2334,
                    "src": "8507:17:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2873,
                  "id": 2938,
                  "nodeType": "Return",
                  "src": "8500:24:4"
                }
              ]
            },
            "documentation": {
              "id": 2865,
              "nodeType": "StructuredDocumentation",
              "src": "7929:155:4",
              "text": " @notice returns total supply in a specific blockchain\n @param _blockNumber get total supply at specific block\n @return the totaly supply"
            },
            "functionSelector": "05bc9e84",
            "id": 2940,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupplyAtBlockchain",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2870,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2867,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2940,
                  "src": "8119:11:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2866,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8119:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2869,
                  "mutability": "mutable",
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2940,
                  "src": "8132:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2868,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8132:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8118:35:4"
            },
            "returnParameters": {
              "id": 2873,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2872,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2940,
                  "src": "8181:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2871,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8181:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8180:9:4"
            },
            "scope": 3347,
            "src": "8086:442:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3038,
              "nodeType": "Block",
              "src": "9153:787:4",
              "statements": [
                {
                  "assignments": [
                    2956
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2956,
                      "mutability": "mutable",
                      "name": "idHash",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3038,
                      "src": "9157:14:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2955,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "9157:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2963,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2960,
                            "name": "_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2943,
                            "src": "9190:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "id": 2959,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9184:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": {
                            "id": 2958,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "9184:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 2961,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9184:10:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2957,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "9174:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 2962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9174:21:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9157:38:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2970,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2965,
                              "name": "blockchainStates",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2352,
                              "src": "9211:16:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_$",
                                "typeString": "mapping(bytes32 => struct GReputation.BlockchainState storage ref[] storage ref)"
                              }
                            },
                            "id": 2967,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2966,
                              "name": "idHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2956,
                              "src": "9228:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9211:24:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage",
                              "typeString": "struct GReputation.BlockchainState storage ref[] storage ref"
                            }
                          },
                          "id": 2968,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9211:31:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2969,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9245:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "9211:35:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6e6f20737461746520666f756e6420666f7220676976656e205f6964",
                        "id": 2971,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9251:30:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_bd2561b8d6c3f18da1998f54f8f432a2d001e0c77a47fd54aad3fa99f15b42f7",
                          "typeString": "literal_string \"no state found for given _id\""
                        },
                        "value": "no state found for given _id"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_bd2561b8d6c3f18da1998f54f8f432a2d001e0c77a47fd54aad3fa99f15b42f7",
                          "typeString": "literal_string \"no state found for given _id\""
                        }
                      ],
                      "id": 2964,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9199:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2972,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9199:86:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2973,
                  "nodeType": "ExpressionStatement",
                  "src": "9199:86:4"
                },
                {
                  "assignments": [
                    2975
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2975,
                      "mutability": "mutable",
                      "name": "stateHash",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3038,
                      "src": "9289:17:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2974,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "9289:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2987,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2976,
                          "name": "blockchainStates",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2352,
                          "src": "9312:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_$",
                            "typeString": "mapping(bytes32 => struct GReputation.BlockchainState storage ref[] storage ref)"
                          }
                        },
                        "id": 2978,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2977,
                          "name": "idHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2956,
                          "src": "9329:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9312:24:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage",
                          "typeString": "struct GReputation.BlockchainState storage ref[] storage ref"
                        }
                      },
                      "id": 2985,
                      "indexExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2984,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2979,
                              "name": "blockchainStates",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2352,
                              "src": "9337:16:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_$",
                                "typeString": "mapping(bytes32 => struct GReputation.BlockchainState storage ref[] storage ref)"
                              }
                            },
                            "id": 2981,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2980,
                              "name": "idHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2956,
                              "src": "9354:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9337:24:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage",
                              "typeString": "struct GReputation.BlockchainState storage ref[] storage ref"
                            }
                          },
                          "id": 2982,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9337:31:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 2983,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9371:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "9337:35:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9312:61:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_BlockchainState_$2341_storage",
                        "typeString": "struct GReputation.BlockchainState storage ref"
                      }
                    },
                    "id": 2986,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "stateHash",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2330,
                    "src": "9312:76:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9289:99:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2989,
                              "name": "stateHashBalances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2359,
                              "src": "9496:17:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(bytes32 => mapping(address => uint256))"
                              }
                            },
                            "id": 2991,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2990,
                              "name": "stateHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2975,
                              "src": "9514:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9496:28:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 2993,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 2992,
                            "name": "_user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2945,
                            "src": "9525:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9496:35:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2994,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9535:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "9496:40:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "73746174654861736820616c72656164792070726f766564",
                        "id": 2996,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9541:26:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_861c53c08650cee39afd8a8fce3792ae7bfaeb2432dd1d76cec73c7678cfd784",
                          "typeString": "literal_string \"stateHash already proved\""
                        },
                        "value": "stateHash already proved"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_861c53c08650cee39afd8a8fce3792ae7bfaeb2432dd1d76cec73c7678cfd784",
                          "typeString": "literal_string \"stateHash already proved\""
                        }
                      ],
                      "id": 2988,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9484:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2997,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9484:87:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2998,
                  "nodeType": "ExpressionStatement",
                  "src": "9484:87:4"
                },
                {
                  "assignments": [
                    null,
                    3000
                  ],
                  "declarations": [
                    null,
                    {
                      "constant": false,
                      "id": 3000,
                      "mutability": "mutable",
                      "name": "isProofValid",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3038,
                      "src": "9579:17:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 2999,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "9579:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3007,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3002,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2945,
                        "src": "9621:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3003,
                        "name": "_balance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2947,
                        "src": "9628:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3004,
                        "name": "stateHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2975,
                        "src": "9638:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3005,
                        "name": "_proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2950,
                        "src": "9649:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      ],
                      "id": 3001,
                      "name": "_checkMerkleProof",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3333,
                      "src": "9603:17:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$_t_bytes32_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_bytes32_$_t_bool_$",
                        "typeString": "function (address,uint256,bytes32,bytes32[] memory) pure returns (bytes32,bool)"
                      }
                    },
                    "id": 3006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9603:53:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bytes32_$_t_bool_$",
                      "typeString": "tuple(bytes32,bool)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9576:80:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3009,
                        "name": "isProofValid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3000,
                        "src": "9668:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "696e76616c6964206d65726b6c652070726f6f66",
                        "id": 3010,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9682:22:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_25f2e616fb4e39869325d77f95859ffc4bf04bfb15d3a74a1e599c611657a20e",
                          "typeString": "literal_string \"invalid merkle proof\""
                        },
                        "value": "invalid merkle proof"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_25f2e616fb4e39869325d77f95859ffc4bf04bfb15d3a74a1e599c611657a20e",
                          "typeString": "literal_string \"invalid merkle proof\""
                        }
                      ],
                      "id": 3008,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9660:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9660:45:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3012,
                  "nodeType": "ExpressionStatement",
                  "src": "9660:45:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 3020,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3013,
                      "name": "idHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2956,
                      "src": "9758:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "726f6f745374617465",
                              "id": 3017,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9784:11:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_0df2f1ec68f7ac2e4205051c96e8cfd7b54c89c139839c13d3d59548ae1488a1",
                                "typeString": "literal_string \"rootState\""
                              },
                              "value": "rootState"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_0df2f1ec68f7ac2e4205051c96e8cfd7b54c89c139839c13d3d59548ae1488a1",
                                "typeString": "literal_string \"rootState\""
                              }
                            ],
                            "id": 3016,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9778:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 3015,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "9778:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 3018,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9778:18:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 3014,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "9768:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 3019,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9768:29:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "9758:39:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3027,
                  "nodeType": "IfStatement",
                  "src": "9754:77:4",
                  "trueBody": {
                    "id": 3026,
                    "nodeType": "Block",
                    "src": "9799:32:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3022,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2945,
                              "src": "9810:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3023,
                              "name": "_balance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2947,
                              "src": "9817:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3021,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              2446
                            ],
                            "referencedDeclaration": 2446,
                            "src": "9804:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (address,uint256) returns (uint256)"
                            }
                          },
                          "id": 3024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9804:22:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3025,
                        "nodeType": "ExpressionStatement",
                        "src": "9804:22:4"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3034,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3028,
                          "name": "stateHashBalances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2359,
                          "src": "9875:17:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(bytes32 => mapping(address => uint256))"
                          }
                        },
                        "id": 3031,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 3029,
                          "name": "stateHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2975,
                          "src": "9893:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9875:28:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 3032,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 3030,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2945,
                        "src": "9904:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9875:35:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3033,
                      "name": "_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2947,
                      "src": "9913:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9875:46:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3035,
                  "nodeType": "ExpressionStatement",
                  "src": "9875:46:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 3036,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9932:4:4",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 2954,
                  "id": 3037,
                  "nodeType": "Return",
                  "src": "9925:11:4"
                }
              ]
            },
            "documentation": {
              "id": 2941,
              "nodeType": "StructuredDocumentation",
              "src": "8531:474:4",
              "text": " @notice prove user balance in a specific blockchain state hash\n @dev \"rootState\" is a special state that can be supplied once, and actually mints reputation on the current blockchain\n @param _id the string id of the blockchain we supply proof for\n @param _user the user to prove his balance\n @param _balance the balance we are prooving\n @param _proof array of byte32 with proof data (currently merkle tree path)\n @return true if proof is valid"
            },
            "functionSelector": "9adf01f7",
            "id": 3039,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "proveBalanceOfAtBlockchain",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2951,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2943,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3039,
                  "src": "9046:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2942,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "9046:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2945,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3039,
                  "src": "9067:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2944,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9067:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2947,
                  "mutability": "mutable",
                  "name": "_balance",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3039,
                  "src": "9084:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2946,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9084:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2950,
                  "mutability": "mutable",
                  "name": "_proof",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3039,
                  "src": "9104:23:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2948,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "9104:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 2949,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9104:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9042:88:4"
            },
            "returnParameters": {
              "id": 2954,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2953,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3039,
                  "src": "9147:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2952,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9147:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9146:6:4"
            },
            "scope": 3347,
            "src": "9007:933:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3051,
              "nodeType": "Block",
              "src": "10189:31:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 3047,
                      "name": "delegates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2368,
                      "src": "10200:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                        "typeString": "mapping(address => address)"
                      }
                    },
                    "id": 3049,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 3048,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3042,
                      "src": "10210:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10200:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 3046,
                  "id": 3050,
                  "nodeType": "Return",
                  "src": "10193:23:4"
                }
              ]
            },
            "documentation": {
              "id": 3040,
              "nodeType": "StructuredDocumentation",
              "src": "9943:179:4",
              "text": "@notice returns current delegate of _user\n @param _user the delegatee\n @return the address of the delegate (can be _user  if no delegate or 0x0 if _user doesnt exists)"
            },
            "functionSelector": "8d22ea2a",
            "id": 3052,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "delegateOf",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3043,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3042,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3052,
                  "src": "10144:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3041,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10144:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10143:15:4"
            },
            "returnParameters": {
              "id": 3046,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3045,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3052,
                  "src": "10180:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3044,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10180:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10179:9:4"
            },
            "scope": 3347,
            "src": "10124:96:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3064,
              "nodeType": "Block",
              "src": "10358:49:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3059,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "10381:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3060,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10381:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3061,
                        "name": "_delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3055,
                        "src": "10393:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3058,
                      "name": "_delegateTo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3269,
                      "src": "10369:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 3062,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10369:34:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "functionReturnParameters": 3057,
                  "id": 3063,
                  "nodeType": "Return",
                  "src": "10362:41:4"
                }
              ]
            },
            "documentation": {
              "id": 3053,
              "nodeType": "StructuredDocumentation",
              "src": "10223:87:4",
              "text": "@notice delegate votes to another user\n @param _delegate the recipient of votes"
            },
            "functionSelector": "ac637c7a",
            "id": 3065,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "delegateTo",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3056,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3055,
                  "mutability": "mutable",
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3065,
                  "src": "10332:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3054,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10332:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10331:19:4"
            },
            "returnParameters": {
              "id": 3057,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10358:0:4"
            },
            "scope": 3347,
            "src": "10312:95:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3076,
              "nodeType": "Block",
              "src": "10513:50:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3070,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "10536:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3071,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10536:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3072,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "10548:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3073,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10548:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 3069,
                      "name": "_delegateTo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3269,
                      "src": "10524:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 3074,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10524:35:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "functionReturnParameters": 3068,
                  "id": 3075,
                  "nodeType": "Return",
                  "src": "10517:42:4"
                }
              ]
            },
            "documentation": {
              "id": 3066,
              "nodeType": "StructuredDocumentation",
              "src": "10410:72:4",
              "text": "@notice cancel user delegation\n @dev makes user his own delegate"
            },
            "functionSelector": "92ab89bb",
            "id": 3077,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "undelegate",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3067,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10503:2:4"
            },
            "returnParameters": {
              "id": 3068,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10513:0:4"
            },
            "scope": 3347,
            "src": "10484:79:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3178,
              "nodeType": "Block",
              "src": "11091:746:4",
              "statements": [
                {
                  "assignments": [
                    3094
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3094,
                      "mutability": "mutable",
                      "name": "domainSeparator",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3178,
                      "src": "11095:23:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3093,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11095:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3113,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3098,
                            "name": "DOMAIN_TYPEHASH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2322,
                            "src": "11156:15:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 3102,
                                    "name": "name",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2316,
                                    "src": "11194:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 3101,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "11188:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 3100,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "11188:5:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 3103,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11188:11:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 3099,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "11178:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 3104,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11178:22:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3105,
                              "name": "getChainId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3346,
                              "src": "11207:10:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint256_$",
                                "typeString": "function () pure returns (uint256)"
                              }
                            },
                            "id": 3106,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11207:12:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3109,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "11234:4:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_GReputation_$3347",
                                  "typeString": "contract GReputation"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_GReputation_$3347",
                                  "typeString": "contract GReputation"
                                }
                              ],
                              "id": 3108,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "11226:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 3107,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "11226:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 3110,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11226:13:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3096,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "11139:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 3097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encode",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "11139:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 3111,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11139:106:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 3095,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "11124:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3112,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11124:126:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11095:155:4"
                },
                {
                  "assignments": [
                    3115
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3115,
                      "mutability": "mutable",
                      "name": "structHash",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3178,
                      "src": "11254:18:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3114,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11254:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3125,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3119,
                            "name": "DELEGATION_TYPEHASH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2328,
                            "src": "11304:19:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3120,
                            "name": "_delegate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3080,
                            "src": "11325:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3121,
                            "name": "_nonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3082,
                            "src": "11336:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3122,
                            "name": "_expiry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3084,
                            "src": "11344:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3117,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "11293:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 3118,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encode",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "11293:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 3123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11293:59:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 3116,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "11278:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11278:79:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11254:103:4"
                },
                {
                  "assignments": [
                    3127
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3127,
                      "mutability": "mutable",
                      "name": "digest",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3178,
                      "src": "11361:14:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3126,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11361:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3136,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "1901",
                            "id": 3131,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11413:10:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                              "typeString": "literal_string \"\u0019\u0001\""
                            },
                            "value": "\u0019\u0001"
                          },
                          {
                            "argumentTypes": null,
                            "id": 3132,
                            "name": "domainSeparator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3094,
                            "src": "11425:15:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3133,
                            "name": "structHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3115,
                            "src": "11442:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                              "typeString": "literal_string \"\u0019\u0001\""
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3129,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "11396:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 3130,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "11396:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 3134,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11396:57:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 3128,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "11381:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3135,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11381:77:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11361:97:4"
                },
                {
                  "assignments": [
                    3138
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3138,
                      "mutability": "mutable",
                      "name": "signatory",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3178,
                      "src": "11462:17:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3137,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "11462:7:4",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3145,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3140,
                        "name": "digest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3127,
                        "src": "11492:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3141,
                        "name": "_v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3086,
                        "src": "11500:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3142,
                        "name": "_r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3088,
                        "src": "11504:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3143,
                        "name": "_s",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3090,
                        "src": "11508:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 3139,
                      "name": "ecrecover",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -6,
                      "src": "11482:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                      }
                    },
                    "id": 3144,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11482:29:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11462:49:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3152,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3147,
                          "name": "signatory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3138,
                          "src": "11527:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 3150,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11548:1:4",
                              "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": 3149,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "11540:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 3148,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "11540:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 3151,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11540:10:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "11527:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4752657075746174696f6e3a3a64656c656761746542795369673a20696e76616c6964207369676e6174757265",
                        "id": 3153,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11555:47:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b684cef1704a827e0a2175bd42616f8e28c29cf38b3a7cedae52995de42cd638",
                          "typeString": "literal_string \"GReputation::delegateBySig: invalid signature\""
                        },
                        "value": "GReputation::delegateBySig: invalid signature"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b684cef1704a827e0a2175bd42616f8e28c29cf38b3a7cedae52995de42cd638",
                          "typeString": "literal_string \"GReputation::delegateBySig: invalid signature\""
                        }
                      ],
                      "id": 3146,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11515:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3154,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11515:91:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3155,
                  "nodeType": "ExpressionStatement",
                  "src": "11515:91:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3162,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3157,
                          "name": "_nonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3082,
                          "src": "11622:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3161,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "11632:19:4",
                          "subExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 3158,
                              "name": "nonces",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2346,
                              "src": "11632:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 3160,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 3159,
                              "name": "signatory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3138,
                              "src": "11639:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "11632:17:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "11622:29:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4752657075746174696f6e3a3a64656c656761746542795369673a20696e76616c6964206e6f6e6365",
                        "id": 3163,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11656:43:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1b3d7e1fcc9690eb57c921265da44562c1a0250f1d973b525aed3d4c478ee77b",
                          "typeString": "literal_string \"GReputation::delegateBySig: invalid nonce\""
                        },
                        "value": "GReputation::delegateBySig: invalid nonce"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1b3d7e1fcc9690eb57c921265da44562c1a0250f1d973b525aed3d4c478ee77b",
                          "typeString": "literal_string \"GReputation::delegateBySig: invalid nonce\""
                        }
                      ],
                      "id": 3156,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11610:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3164,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11610:93:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3165,
                  "nodeType": "ExpressionStatement",
                  "src": "11610:93:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3169,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3167,
                          "name": "now",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -17,
                          "src": "11719:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3168,
                          "name": "_expiry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3084,
                          "src": "11726:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "11719:14:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4752657075746174696f6e3a3a64656c656761746542795369673a207369676e61747572652065787069726564",
                        "id": 3170,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11738:47:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3d946c5bd0d5bf9b3fa8244bc5af37ffc1770f288dd1046b96c4bbb0afd4abeb",
                          "typeString": "literal_string \"GReputation::delegateBySig: signature expired\""
                        },
                        "value": "GReputation::delegateBySig: signature expired"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3d946c5bd0d5bf9b3fa8244bc5af37ffc1770f288dd1046b96c4bbb0afd4abeb",
                          "typeString": "literal_string \"GReputation::delegateBySig: signature expired\""
                        }
                      ],
                      "id": 3166,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11707:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3171,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11707:82:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3172,
                  "nodeType": "ExpressionStatement",
                  "src": "11707:82:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3174,
                        "name": "signatory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3138,
                        "src": "11812:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3175,
                        "name": "_delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3080,
                        "src": "11823:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3173,
                      "name": "_delegateTo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3269,
                      "src": "11800:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 3176,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11800:33:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "functionReturnParameters": 3092,
                  "id": 3177,
                  "nodeType": "Return",
                  "src": "11793:40:4"
                }
              ]
            },
            "documentation": {
              "id": 3078,
              "nodeType": "StructuredDocumentation",
              "src": "10566:392:4",
              "text": " @notice Delegates votes from signatory to `delegate`\n @param _delegate The address to delegate votes to\n @param _nonce The contract state required to match the signature\n @param _expiry The time at which to expire the signature\n @param _v The recovery byte of the signature\n @param _r Half of the ECDSA signature pair\n @param _s Half of the ECDSA signature pair"
            },
            "functionSelector": "c3cda520",
            "id": 3179,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "delegateBySig",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3091,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3080,
                  "mutability": "mutable",
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3179,
                  "src": "10986:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3079,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10986:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3082,
                  "mutability": "mutable",
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3179,
                  "src": "11007:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3081,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11007:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3084,
                  "mutability": "mutable",
                  "name": "_expiry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3179,
                  "src": "11025:15:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3083,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11025:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3086,
                  "mutability": "mutable",
                  "name": "_v",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3179,
                  "src": "11044:8:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 3085,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "11044:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3088,
                  "mutability": "mutable",
                  "name": "_r",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3179,
                  "src": "11056:10:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3087,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11056:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3090,
                  "mutability": "mutable",
                  "name": "_s",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3179,
                  "src": "11070:10:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3089,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11070:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10982:101:4"
            },
            "returnParameters": {
              "id": 3092,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11091:0:4"
            },
            "scope": 3347,
            "src": "10960:877:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3268,
              "nodeType": "Block",
              "src": "12064:821:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3193,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3188,
                          "name": "_delegate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3184,
                          "src": "12080:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 3191,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12101:1:4",
                              "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": 3190,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "12093:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 3189,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "12093:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 3192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12093:10:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "12080:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4752657075746174696f6e3a3a64656c65676174652063616e27742064656c6567617420746f206e756c6c2061646472657373",
                        "id": 3194,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12108:53:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6e185b2e2b33eec3731da6cc5e2b932be32f566f6490651a989258735365d636",
                          "typeString": "literal_string \"GReputation::delegate can't delegat to null address\""
                        },
                        "value": "GReputation::delegate can't delegat to null address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6e185b2e2b33eec3731da6cc5e2b932be32f566f6490651a989258735365d636",
                          "typeString": "literal_string \"GReputation::delegate can't delegat to null address\""
                        }
                      ],
                      "id": 3187,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12068:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3195,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12068:97:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3196,
                  "nodeType": "ExpressionStatement",
                  "src": "12068:97:4"
                },
                {
                  "assignments": [
                    3198
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3198,
                      "mutability": "mutable",
                      "name": "curDelegator",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3268,
                      "src": "12170:20:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3197,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "12170:7:4",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3202,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 3199,
                      "name": "delegates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2368,
                      "src": "12193:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                        "typeString": "mapping(address => address)"
                      }
                    },
                    "id": 3201,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 3200,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3182,
                      "src": "12203:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "12193:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12170:39:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3206,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3204,
                          "name": "curDelegator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3198,
                          "src": "12221:12:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3205,
                          "name": "_delegate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3184,
                          "src": "12237:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "12221:25:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "616c72656164792064656c65676174696e6720746f2064656c656761746f72",
                        "id": 3207,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12248:33:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9294b2ce96ffc8d4f08fe3a1dd2e8b30a4b6fa03eeb64bc3b9ee07bb0b0ac554",
                          "typeString": "literal_string \"already delegating to delegator\""
                        },
                        "value": "already delegating to delegator"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9294b2ce96ffc8d4f08fe3a1dd2e8b30a4b6fa03eeb64bc3b9ee07bb0b0ac554",
                          "typeString": "literal_string \"already delegating to delegator\""
                        }
                      ],
                      "id": 3203,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12213:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3208,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12213:69:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3209,
                  "nodeType": "ExpressionStatement",
                  "src": "12213:69:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 3210,
                        "name": "delegates",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2368,
                        "src": "12287:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 3212,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 3211,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3182,
                        "src": "12297:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "12287:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3213,
                      "name": "_delegate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3184,
                      "src": "12306:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "12287:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3215,
                  "nodeType": "ExpressionStatement",
                  "src": "12287:28:4"
                },
                {
                  "assignments": [
                    3217
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3217,
                      "mutability": "mutable",
                      "name": "coreBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3268,
                      "src": "12361:19:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3216,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12361:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3221,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3219,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3182,
                        "src": "12393:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3218,
                      "name": "balanceOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3585,
                      "src": "12383:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 3220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12383:16:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12361:38:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3227,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3222,
                      "name": "curDelegator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3198,
                      "src": "12483:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12507:1:4",
                          "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": 3224,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "12499:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 3223,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12499:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 3226,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12499:10:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "12483:26:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3248,
                  "nodeType": "IfStatement",
                  "src": "12479:210:4",
                  "trueBody": {
                    "id": 3247,
                    "nodeType": "Block",
                    "src": "12511:178:4",
                    "statements": [
                      {
                        "assignments": [
                          3229
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3229,
                            "mutability": "mutable",
                            "name": "curVotes",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3247,
                            "src": "12516:16:4",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3228,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "12516:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3236,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3231,
                              "name": "curDelegator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3198,
                              "src": "12546:12:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "66616c7365",
                              "id": 3232,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12560:5:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "false"
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3233,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "12567:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 3234,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "number",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "12567:12:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3230,
                            "name": "getVotesAt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              2683,
                              2716
                            ],
                            "referencedDeclaration": 2683,
                            "src": "12535:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (address,bool,uint256) view returns (uint256)"
                            }
                          },
                          "id": 3235,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12535:45:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12516:64:4"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3238,
                              "name": "curDelegator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3198,
                              "src": "12611:12:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3239,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3182,
                              "src": "12629:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3240,
                              "name": "curVotes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3229,
                              "src": "12640:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3243,
                                  "name": "coreBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3217,
                                  "src": "12667:11:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3241,
                                  "name": "curVotes",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3229,
                                  "src": "12654:8:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 3242,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 7990,
                                "src": "12654:12:4",
                                "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": 3244,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12654:25:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3237,
                            "name": "_updateDelegateVotes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3296,
                            "src": "12585:20:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 3245,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12585:99:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3246,
                        "nodeType": "ExpressionStatement",
                        "src": "12585:99:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3250
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3250,
                      "mutability": "mutable",
                      "name": "curVotes",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3268,
                      "src": "12725:16:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3249,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12725:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3257,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3252,
                        "name": "_delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3184,
                        "src": "12755:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 3253,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12766:5:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3254,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "12773:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 3255,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "12773:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3251,
                      "name": "getVotesAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2683,
                        2716
                      ],
                      "referencedDeclaration": 2683,
                      "src": "12744:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,bool,uint256) view returns (uint256)"
                      }
                    },
                    "id": 3256,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12744:42:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12725:61:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3259,
                        "name": "_delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3184,
                        "src": "12815:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3260,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3182,
                        "src": "12829:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3261,
                        "name": "curVotes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3250,
                        "src": "12839:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3264,
                            "name": "coreBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3217,
                            "src": "12865:11:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3262,
                            "name": "curVotes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3250,
                            "src": "12852:8:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3263,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7973,
                          "src": "12852:12:4",
                          "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": 3265,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12852:25:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3258,
                      "name": "_updateDelegateVotes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3296,
                      "src": "12790:20:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256)"
                      }
                    },
                    "id": 3266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12790:91:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3267,
                  "nodeType": "ExpressionStatement",
                  "src": "12790:91:4"
                }
              ]
            },
            "documentation": {
              "id": 3180,
              "nodeType": "StructuredDocumentation",
              "src": "11840:158:4",
              "text": "@notice internal function to delegate votes to another user\n @param _user the source of votes (delegator)\n @param _delegate the recipient of votes"
            },
            "id": 3269,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_delegateTo",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3185,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3182,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3269,
                  "src": "12021:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3181,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12021:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3184,
                  "mutability": "mutable",
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3269,
                  "src": "12036:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3183,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12036:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12020:34:4"
            },
            "returnParameters": {
              "id": 3186,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12064:0:4"
            },
            "scope": 3347,
            "src": "12000:885:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3295,
              "nodeType": "Block",
              "src": "13307:133:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3282,
                          "name": "activeVotes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2374,
                          "src": "13328:11:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
                            "typeString": "mapping(address => uint256[] storage ref)"
                          }
                        },
                        "id": 3284,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 3283,
                          "name": "_delegate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3272,
                          "src": "13340:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "13328:22:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                          "typeString": "uint256[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3285,
                        "name": "_newVotes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3278,
                        "src": "13352:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                          "typeString": "uint256[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3281,
                      "name": "updateValueAtNow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3858,
                      "src": "13311:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256[] storage pointer,uint256)"
                      }
                    },
                    "id": 3286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13311:51:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3287,
                  "nodeType": "ExpressionStatement",
                  "src": "13311:51:4"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3289,
                        "name": "_delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3272,
                        "src": "13392:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3290,
                        "name": "_delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3274,
                        "src": "13403:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3291,
                        "name": "_oldVotes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3276,
                        "src": "13415:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3292,
                        "name": "_newVotes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3278,
                        "src": "13426:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3288,
                      "name": "DelegateVotesChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2385,
                      "src": "13371:20:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256)"
                      }
                    },
                    "id": 3293,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13371:65:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3294,
                  "nodeType": "EmitStatement",
                  "src": "13366:70:4"
                }
              ]
            },
            "documentation": {
              "id": 3270,
              "nodeType": "StructuredDocumentation",
              "src": "12888:290:4",
              "text": "@notice internal function to update delegated votes, emits event with changes\n @param _delegate the delegate whose record we are updating\n @param _delegator the delegator\n @param _oldVotes the delegate previous votes\n @param _newVotes the delegate votes after the change"
            },
            "id": 3296,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_updateDelegateVotes",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3279,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3272,
                  "mutability": "mutable",
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3296,
                  "src": "13213:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3271,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13213:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3274,
                  "mutability": "mutable",
                  "name": "_delegator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3296,
                  "src": "13234:18:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3273,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13234:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3276,
                  "mutability": "mutable",
                  "name": "_oldVotes",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3296,
                  "src": "13256:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3275,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13256:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3278,
                  "mutability": "mutable",
                  "name": "_newVotes",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3296,
                  "src": "13277:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3277,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13277:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13209:88:4"
            },
            "returnParameters": {
              "id": 3280,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13307:0:4"
            },
            "scope": 3347,
            "src": "13180:260:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3332,
              "nodeType": "Block",
              "src": "13807:130:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3313,
                      "name": "leafHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3309,
                      "src": "13811:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3317,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3299,
                              "src": "13843:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3318,
                              "name": "_balance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3301,
                              "src": "13850:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3315,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "13832:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 3316,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encode",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "13832:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 3319,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13832:27:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 3314,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "13822:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 3320,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13822:38:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "13811:49:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 3322,
                  "nodeType": "ExpressionStatement",
                  "src": "13811:49:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3330,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3323,
                      "name": "isProofValid",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3311,
                      "src": "13864:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3326,
                          "name": "_proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3306,
                          "src": "13909:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3327,
                          "name": "_root",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3303,
                          "src": "13917:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3328,
                          "name": "leafHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3309,
                          "src": "13924:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 3324,
                          "name": "MerkleProofUpgradeable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7944,
                          "src": "13879:22:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_MerkleProofUpgradeable_$7944_$",
                            "typeString": "type(library MerkleProofUpgradeable)"
                          }
                        },
                        "id": 3325,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "verify",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7943,
                        "src": "13879:29:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                          "typeString": "function (bytes32[] memory,bytes32,bytes32) pure returns (bool)"
                        }
                      },
                      "id": 3329,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13879:54:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "13864:69:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3331,
                  "nodeType": "ExpressionStatement",
                  "src": "13864:69:4"
                }
              ]
            },
            "documentation": {
              "id": 3297,
              "nodeType": "StructuredDocumentation",
              "src": "13443:191:4",
              "text": "@notice helper function to check merkle proof using openzeppelin\n @return leafHash isProofValid tuple (byte32, bool) with the hash of the leaf data we prove and true if proof is valid"
            },
            "id": 3333,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkMerkleProof",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3307,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3299,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3333,
                  "src": "13666:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3298,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13666:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3301,
                  "mutability": "mutable",
                  "name": "_balance",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3333,
                  "src": "13683:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3300,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13683:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3303,
                  "mutability": "mutable",
                  "name": "_root",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3333,
                  "src": "13703:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3302,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13703:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3306,
                  "mutability": "mutable",
                  "name": "_proof",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3333,
                  "src": "13720:23:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 3304,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "13720:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 3305,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "13720:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13662:84:4"
            },
            "returnParameters": {
              "id": 3312,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3309,
                  "mutability": "mutable",
                  "name": "leafHash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3333,
                  "src": "13770:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3308,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13770:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3311,
                  "mutability": "mutable",
                  "name": "isProofValid",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3333,
                  "src": "13788:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3310,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "13788:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13769:37:4"
            },
            "scope": 3347,
            "src": "13636:301:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3345,
              "nodeType": "Block",
              "src": "14069:82:4",
              "statements": [
                {
                  "assignments": [
                    3340
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3340,
                      "mutability": "mutable",
                      "name": "chainId",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3345,
                      "src": "14073:15:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3339,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14073:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3341,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14073:15:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "14101:29:4",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "14106:20:4",
                        "value": {
                          "arguments": [],
                          "functionName": {
                            "name": "chainid",
                            "nodeType": "YulIdentifier",
                            "src": "14117:7:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "14117:9:4"
                        },
                        "variableNames": [
                          {
                            "name": "chainId",
                            "nodeType": "YulIdentifier",
                            "src": "14106:7:4"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 3340,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14106:7:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 3342,
                  "nodeType": "InlineAssembly",
                  "src": "14092:38:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3343,
                    "name": "chainId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3340,
                    "src": "14140:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3338,
                  "id": 3344,
                  "nodeType": "Return",
                  "src": "14133:14:4"
                }
              ]
            },
            "documentation": {
              "id": 3334,
              "nodeType": "StructuredDocumentation",
              "src": "13940:73:4",
              "text": "@notice helper function to get current chain id\n @return chain id"
            },
            "id": 3346,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getChainId",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3335,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14034:2:4"
            },
            "returnParameters": {
              "id": 3338,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3337,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3346,
                  "src": "14060:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3336,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14060:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14059:9:4"
            },
            "scope": 3347,
            "src": "14015:136:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 3348,
        "src": "376:13777:4"
      }
    ],
    "src": "32:14122:4"
  },
  "legacyAST": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/governance/GReputation.sol",
    "exportedSymbols": {
      "GReputation": [
        3347
      ]
    },
    "id": 3348,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2303,
        "literals": [
          "solidity",
          ">=",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "32:24:4"
      },
      {
        "absolutePath": "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol",
        "id": 2304,
        "nodeType": "ImportDirective",
        "scope": 3348,
        "sourceUnit": 8141,
        "src": "58:74:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-upgradeable/cryptography/MerkleProofUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/cryptography/MerkleProofUpgradeable.sol",
        "id": 2305,
        "nodeType": "ImportDirective",
        "scope": 3348,
        "sourceUnit": 7945,
        "src": "133:85:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/governance/Reputation.sol",
        "file": "./Reputation.sol",
        "id": 2306,
        "nodeType": "ImportDirective",
        "scope": 3348,
        "sourceUnit": 3860,
        "src": "220:26:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/upgradables/contracts/Interfaces.sol",
        "file": "../Interfaces.sol",
        "id": 2307,
        "nodeType": "ImportDirective",
        "scope": 3348,
        "sourceUnit": 552,
        "src": "247:27:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 2309,
              "name": "Reputation",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3859,
              "src": "400:10:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Reputation_$3859",
                "typeString": "contract Reputation"
              }
            },
            "id": 2310,
            "nodeType": "InheritanceSpecifier",
            "src": "400:10:4"
          }
        ],
        "contractDependencies": [
          3859,
          7743,
          7873,
          8211
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 2308,
          "nodeType": "StructuredDocumentation",
          "src": "276:99:4",
          "text": " @title GReputation extends Reputation with delegation and cross blockchain merkle states"
        },
        "fullyImplemented": true,
        "id": 3347,
        "linearizedBaseContracts": [
          3347,
          3859,
          7873,
          7743,
          8211
        ],
        "name": "GReputation",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 2313,
            "libraryName": {
              "contractScope": null,
              "id": 2311,
              "name": "SafeMathUpgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8140,
              "src": "420:19:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMathUpgradeable_$8140",
                "typeString": "library SafeMathUpgradeable"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "414:38:4",
            "typeName": {
              "id": 2312,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "444:7:4",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "functionSelector": "06fdde03",
            "id": 2316,
            "mutability": "constant",
            "name": "name",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 3347,
            "src": "455:43:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory_ptr",
              "typeString": "string"
            },
            "typeName": {
              "id": 2314,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "455:6:4",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "4752657075746174696f6e",
              "id": 2315,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "485:13:4",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_6d6957b3a4022b7a24cdd877ade4bdbb5b5a4e21c5304908c958d003c049de6c",
                "typeString": "literal_string \"GReputation\""
              },
              "value": "GReputation"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "documentation": {
              "id": 2317,
              "nodeType": "StructuredDocumentation",
              "src": "502:58:4",
              "text": "@notice The EIP-712 typehash for the contract's domain"
            },
            "functionSelector": "20606b70",
            "id": 2322,
            "mutability": "constant",
            "name": "DOMAIN_TYPEHASH",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 3347,
            "src": "562:131:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 2318,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "562:7:4",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "454950373132446f6d61696e28737472696e67206e616d652c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429",
                  "id": 2320,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "620:69:4",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866",
                    "typeString": "literal_string \"EIP712Domain(string name,uint256 chainId,address verifyingContract)\""
                  },
                  "value": "EIP712Domain(string name,uint256 chainId,address verifyingContract)"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866",
                    "typeString": "literal_string \"EIP712Domain(string name,uint256 chainId,address verifyingContract)\""
                  }
                ],
                "id": 2319,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": -8,
                "src": "606:9:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 2321,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "606:87:4",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "documentation": {
              "id": 2323,
              "nodeType": "StructuredDocumentation",
              "src": "697:79:4",
              "text": "@notice The EIP-712 typehash for the delegation struct used by the contract"
            },
            "functionSelector": "e7a324dc",
            "id": 2328,
            "mutability": "constant",
            "name": "DELEGATION_TYPEHASH",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 3347,
            "src": "778:118:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 2324,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "778:7:4",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "44656c65676174696f6e28616464726573732064656c65676174652c75696e74323536206e6f6e63652c75696e743235362065787069727929",
                  "id": 2326,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "836:59:4",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_ff41620983935eb4d4a3c7384a066ca8c1d10cef9a5eca9eb97ca735cd14a755",
                    "typeString": "literal_string \"Delegation(address delegate,uint256 nonce,uint256 expiry)\""
                  },
                  "value": "Delegation(address delegate,uint256 nonce,uint256 expiry)"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_ff41620983935eb4d4a3c7384a066ca8c1d10cef9a5eca9eb97ca735cd14a755",
                    "typeString": "literal_string \"Delegation(address delegate,uint256 nonce,uint256 expiry)\""
                  }
                ],
                "id": 2325,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": -8,
                "src": "826:9:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 2327,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "826:70:4",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "canonicalName": "GReputation.BlockchainState",
            "id": 2341,
            "members": [
              {
                "constant": false,
                "id": 2330,
                "mutability": "mutable",
                "name": "stateHash",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 2341,
                "src": "1221:17:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 2329,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1221:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2332,
                "mutability": "mutable",
                "name": "hashType",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 2341,
                "src": "1242:16:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2331,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1242:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2334,
                "mutability": "mutable",
                "name": "totalSupply",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 2341,
                "src": "1262:19:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2333,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1262:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2336,
                "mutability": "mutable",
                "name": "blockNumber",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 2341,
                "src": "1285:19:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2335,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1285:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2340,
                "mutability": "mutable",
                "name": "__reserevedSpace",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 2341,
                "src": "1308:27:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_uint256_$5_storage_ptr",
                  "typeString": "uint256[5]"
                },
                "typeName": {
                  "baseType": {
                    "id": 2337,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1308:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2339,
                  "length": {
                    "argumentTypes": null,
                    "hexValue": "35",
                    "id": 2338,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1316:1:4",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_5_by_1",
                      "typeString": "int_const 5"
                    },
                    "value": "5"
                  },
                  "nodeType": "ArrayTypeName",
                  "src": "1308:10:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$5_storage_ptr",
                    "typeString": "uint256[5]"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "BlockchainState",
            "nodeType": "StructDefinition",
            "scope": 3347,
            "src": "1194:145:4",
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 2342,
              "nodeType": "StructuredDocumentation",
              "src": "1342:66:4",
              "text": "@notice A record of states for signing / validating signatures"
            },
            "functionSelector": "7ecebe00",
            "id": 2346,
            "mutability": "mutable",
            "name": "nonces",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 3347,
            "src": "1410:41:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 2345,
              "keyType": {
                "id": 2343,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1418:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1410:27:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 2344,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1429:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 2347,
              "nodeType": "StructuredDocumentation",
              "src": "1455:61:4",
              "text": "@notice mapping from blockchain id hash to list of states"
            },
            "functionSelector": "f0e18a43",
            "id": 2352,
            "mutability": "mutable",
            "name": "blockchainStates",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 3347,
            "src": "1518:61:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_$",
              "typeString": "mapping(bytes32 => struct GReputation.BlockchainState[])"
            },
            "typeName": {
              "id": 2351,
              "keyType": {
                "id": 2348,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1526:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "1518:37:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_$",
                "typeString": "mapping(bytes32 => struct GReputation.BlockchainState[])"
              },
              "valueType": {
                "baseType": {
                  "contractScope": null,
                  "id": 2349,
                  "name": "BlockchainState",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 2341,
                  "src": "1537:15:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                    "typeString": "struct GReputation.BlockchainState"
                  }
                },
                "id": 2350,
                "length": null,
                "nodeType": "ArrayTypeName",
                "src": "1537:17:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                  "typeString": "struct GReputation.BlockchainState[]"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 2353,
              "nodeType": "StructuredDocumentation",
              "src": "1583:97:4",
              "text": "@notice mapping from stateHash to the user balance can be >0 only after supplying state proof"
            },
            "functionSelector": "22ea1d80",
            "id": 2359,
            "mutability": "mutable",
            "name": "stateHashBalances",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 3347,
            "src": "1682:72:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(bytes32 => mapping(address => uint256))"
            },
            "typeName": {
              "id": 2358,
              "keyType": {
                "id": 2354,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1690:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "1682:47:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(bytes32 => mapping(address => uint256))"
              },
              "valueType": {
                "id": 2357,
                "keyType": {
                  "id": 2355,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1709:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "1701:27:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "valueType": {
                  "id": 2356,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1720:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 2360,
              "nodeType": "StructuredDocumentation",
              "src": "1758:69:4",
              "text": "@notice list of blockchains having a statehash for easy iteration"
            },
            "functionSelector": "6c087d90",
            "id": 2363,
            "mutability": "mutable",
            "name": "activeBlockchains",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 3347,
            "src": "1829:34:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
              "typeString": "bytes32[]"
            },
            "typeName": {
              "baseType": {
                "id": 2361,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1829:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "id": 2362,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "1829:9:4",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                "typeString": "bytes32[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 2364,
              "nodeType": "StructuredDocumentation",
              "src": "1867:40:4",
              "text": "@notice keep map of user -> delegate"
            },
            "functionSelector": "587cde1e",
            "id": 2368,
            "mutability": "mutable",
            "name": "delegates",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 3347,
            "src": "1909:44:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
              "typeString": "mapping(address => address)"
            },
            "typeName": {
              "id": 2367,
              "keyType": {
                "id": 2365,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1917:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1909:27:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                "typeString": "mapping(address => address)"
              },
              "valueType": {
                "id": 2366,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1928:7:4",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 2369,
              "nodeType": "StructuredDocumentation",
              "src": "1957:94:4",
              "text": "@notice map of user non delegatd + delegated votes to user. this is used for actual voting"
            },
            "functionSelector": "2337f7b6",
            "id": 2374,
            "mutability": "mutable",
            "name": "activeVotes",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 3347,
            "src": "2053:48:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
              "typeString": "mapping(address => uint256[])"
            },
            "typeName": {
              "id": 2373,
              "keyType": {
                "id": 2370,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2061:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2053:29:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
                "typeString": "mapping(address => uint256[])"
              },
              "valueType": {
                "baseType": {
                  "id": 2371,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2072:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "id": 2372,
                "length": null,
                "nodeType": "ArrayTypeName",
                "src": "2072:9:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                  "typeString": "uint256[]"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 2375,
              "nodeType": "StructuredDocumentation",
              "src": "2105:81:4",
              "text": "@notice An event thats emitted when a delegate account's vote balance changes"
            },
            "id": 2385,
            "name": "DelegateVotesChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2384,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2377,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "delegate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2385,
                  "src": "2218:24:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2376,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2218:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2379,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "delegator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2385,
                  "src": "2246:25:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2378,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2246:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2381,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "previousBalance",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2385,
                  "src": "2275:23:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2380,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2275:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2383,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newBalance",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2385,
                  "src": "2302:18:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2382,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2302:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2214:109:4"
            },
            "src": "2188:136:4"
          },
          {
            "baseFunctions": [
              3461
            ],
            "body": {
              "id": 2445,
              "nodeType": "Block",
              "src": "2637:333:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2399,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2388,
                        "src": "2653:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2400,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2390,
                        "src": "2660:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2396,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "2641:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GReputation_$3347",
                          "typeString": "contract super GReputation"
                        }
                      },
                      "id": 2398,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3461,
                      "src": "2641:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) returns (uint256)"
                      }
                    },
                    "id": 2401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2641:27:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2402,
                  "nodeType": "ExpressionStatement",
                  "src": "2641:27:4"
                },
                {
                  "assignments": [
                    2404
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2404,
                      "mutability": "mutable",
                      "name": "delegator",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2445,
                      "src": "2672:17:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2403,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2672:7:4",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2408,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2405,
                      "name": "delegates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2368,
                      "src": "2692:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                        "typeString": "mapping(address => address)"
                      }
                    },
                    "id": 2407,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2406,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2388,
                      "src": "2702:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2692:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2672:36:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2419,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2409,
                      "name": "delegator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2404,
                      "src": "2712:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 2415,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2410,
                          "name": "delegator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2404,
                          "src": "2724:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 2413,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2745:1:4",
                              "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": 2412,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2737:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 2411,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2737:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 2414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2737:10:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2724:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "id": 2417,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2388,
                        "src": "2762:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 2418,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "2724:43:4",
                      "trueExpression": {
                        "argumentTypes": null,
                        "id": 2416,
                        "name": "delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2404,
                        "src": "2750:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2712:55:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2420,
                  "nodeType": "ExpressionStatement",
                  "src": "2712:55:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2425,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2421,
                        "name": "delegates",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2368,
                        "src": "2771:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 2423,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2422,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2388,
                        "src": "2781:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2771:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2424,
                      "name": "delegator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2404,
                      "src": "2790:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2771:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2426,
                  "nodeType": "ExpressionStatement",
                  "src": "2771:28:4"
                },
                {
                  "assignments": [
                    2428
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2428,
                      "mutability": "mutable",
                      "name": "previousVotes",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2445,
                      "src": "2803:21:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2427,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2803:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2432,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2430,
                        "name": "delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2404,
                        "src": "2836:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2429,
                      "name": "getVotes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2699,
                      "src": "2827:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 2431,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2827:19:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2803:43:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2434,
                        "name": "delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2404,
                        "src": "2876:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2435,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2388,
                        "src": "2890:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2436,
                        "name": "previousVotes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2428,
                        "src": "2900:13:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2439,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2390,
                            "src": "2936:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2437,
                            "name": "previousVotes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2428,
                            "src": "2918:13:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2438,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7973,
                          "src": "2918:17:4",
                          "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": 2440,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2918:26:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2433,
                      "name": "_updateDelegateVotes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3296,
                      "src": "2851:20:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256)"
                      }
                    },
                    "id": 2441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2851:97:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2442,
                  "nodeType": "ExpressionStatement",
                  "src": "2851:97:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2443,
                    "name": "_amount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2390,
                    "src": "2959:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2395,
                  "id": 2444,
                  "nodeType": "Return",
                  "src": "2952:14:4"
                }
              ]
            },
            "documentation": {
              "id": 2386,
              "nodeType": "StructuredDocumentation",
              "src": "2327:218:4",
              "text": "@notice internal function that overrides Reputation.sol with consideration to delegation\n @param _user the address to mint for\n @param _amount the amount of rep to mint\n @return the actual amount minted"
            },
            "id": 2446,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 2392,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2607:8:4"
            },
            "parameters": {
              "id": 2391,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2388,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2446,
                  "src": "2562:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2387,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2562:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2390,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2446,
                  "src": "2577:15:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2389,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2577:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2561:32:4"
            },
            "returnParameters": {
              "id": 2395,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2394,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2446,
                  "src": "2627:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2393,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2627:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2626:9:4"
            },
            "scope": 3347,
            "src": "2547:423:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              3538
            ],
            "body": {
              "id": 2507,
              "nodeType": "Block",
              "src": "3284:367:4",
              "statements": [
                {
                  "assignments": [
                    2458
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2458,
                      "mutability": "mutable",
                      "name": "amountBurned",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2507,
                      "src": "3288:20:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2457,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3288:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2464,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2461,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2449,
                        "src": "3323:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2462,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2451,
                        "src": "3330:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2459,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "3311:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GReputation_$3347",
                          "typeString": "contract super GReputation"
                        }
                      },
                      "id": 2460,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3538,
                      "src": "3311:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) returns (uint256)"
                      }
                    },
                    "id": 2463,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3311:27:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3288:50:4"
                },
                {
                  "assignments": [
                    2466
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2466,
                      "mutability": "mutable",
                      "name": "delegator",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2507,
                      "src": "3342:17:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2465,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3342:7:4",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2470,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2467,
                      "name": "delegates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2368,
                      "src": "3362:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                        "typeString": "mapping(address => address)"
                      }
                    },
                    "id": 2469,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2468,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2449,
                      "src": "3372:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3362:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3342:36:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2471,
                      "name": "delegator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2466,
                      "src": "3382:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 2477,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2472,
                          "name": "delegator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2466,
                          "src": "3394:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 2475,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3415:1:4",
                              "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": 2474,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3407:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 2473,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3407:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 2476,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3407:10:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "3394:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "id": 2479,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2449,
                        "src": "3432:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 2480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "3394:43:4",
                      "trueExpression": {
                        "argumentTypes": null,
                        "id": 2478,
                        "name": "delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2466,
                        "src": "3420:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3382:55:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2482,
                  "nodeType": "ExpressionStatement",
                  "src": "3382:55:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2483,
                        "name": "delegates",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2368,
                        "src": "3441:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 2485,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 2484,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2449,
                        "src": "3451:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3441:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2486,
                      "name": "delegator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2466,
                      "src": "3460:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3441:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2488,
                  "nodeType": "ExpressionStatement",
                  "src": "3441:28:4"
                },
                {
                  "assignments": [
                    2490
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2490,
                      "mutability": "mutable",
                      "name": "previousVotes",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2507,
                      "src": "3473:21:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2489,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3473:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2494,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2492,
                        "name": "delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2466,
                        "src": "3506:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2491,
                      "name": "getVotes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2699,
                      "src": "3497:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 2493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3497:19:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3473:43:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2496,
                        "name": "delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2466,
                        "src": "3546:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2497,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2449,
                        "src": "3560:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2498,
                        "name": "previousVotes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2490,
                        "src": "3570:13:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2501,
                            "name": "amountBurned",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2458,
                            "src": "3606:12:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2499,
                            "name": "previousVotes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2490,
                            "src": "3588:13:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2500,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sub",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7990,
                          "src": "3588:17:4",
                          "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": 2502,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3588:31:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2495,
                      "name": "_updateDelegateVotes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3296,
                      "src": "3521:20:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256)"
                      }
                    },
                    "id": 2503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3521:102:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2504,
                  "nodeType": "ExpressionStatement",
                  "src": "3521:102:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2505,
                    "name": "amountBurned",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2458,
                    "src": "3635:12:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2456,
                  "id": 2506,
                  "nodeType": "Return",
                  "src": "3628:19:4"
                }
              ]
            },
            "documentation": {
              "id": 2447,
              "nodeType": "StructuredDocumentation",
              "src": "2973:219:4",
              "text": "@notice internal function that overrides Reputation.sol with consideration to delegation\n @param _user the address to burn from\n @param _amount the amount of rep to mint\n @return the actual amount burned"
            },
            "id": 2508,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_burn",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 2453,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3254:8:4"
            },
            "parameters": {
              "id": 2452,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2449,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2508,
                  "src": "3209:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2448,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3209:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2451,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2508,
                  "src": "3224:15:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2450,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3224:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3208:32:4"
            },
            "returnParameters": {
              "id": 2456,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2455,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2508,
                  "src": "3274:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2454,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3274:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3273:9:4"
            },
            "scope": 3347,
            "src": "3194:457:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2629,
              "nodeType": "Block",
              "src": "4046:786:4",
              "statements": [
                {
                  "assignments": [
                    2521
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2521,
                      "mutability": "mutable",
                      "name": "idHash",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2629,
                      "src": "4050:14:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2520,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "4050:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2528,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2525,
                            "name": "_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2511,
                            "src": "4083:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "id": 2524,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4077:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": {
                            "id": 2523,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "4077:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 2526,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4077:10:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2522,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "4067:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 2527,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4067:21:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4050:38:4"
                },
                {
                  "assignments": [
                    2530
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2530,
                      "mutability": "mutable",
                      "name": "isRootState",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2629,
                      "src": "4164:16:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 2529,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "4164:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2539,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 2538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2531,
                      "name": "idHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2521,
                      "src": "4183:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "726f6f745374617465",
                              "id": 2535,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4209:11:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_0df2f1ec68f7ac2e4205051c96e8cfd7b54c89c139839c13d3d59548ae1488a1",
                                "typeString": "literal_string \"rootState\""
                              },
                              "value": "rootState"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_0df2f1ec68f7ac2e4205051c96e8cfd7b54c89c139839c13d3d59548ae1488a1",
                                "typeString": "literal_string \"rootState\""
                              }
                            ],
                            "id": 2534,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4203:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 2533,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "4203:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 2536,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4203:18:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 2532,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "4193:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 2537,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4193:29:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4183:39:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4164:58:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 2550,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2542,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "4238:12:4",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 2541,
                            "name": "isRootState",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2530,
                            "src": "4239:11:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2549,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2545,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "4274:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 2546,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "number",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4274:12:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 2543,
                                "name": "super",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -25,
                                "src": "4254:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_super$_GReputation_$3347",
                                  "typeString": "contract super GReputation"
                                }
                              },
                              "id": 2544,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "totalSupplyAt",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3661,
                              "src": "4254:19:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256) view returns (uint256)"
                              }
                            },
                            "id": 2547,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4254:33:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2548,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4291:1:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "4254:38:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "4238:54:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "726f6f74537461746520616c72656164792063726561746564",
                        "id": 2551,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4297:27:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_79983b43c21246812785f3366cf04661d7b80dfaa095185c600f598523aac60b",
                          "typeString": "literal_string \"rootState already created\""
                        },
                        "value": "rootState already created"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_79983b43c21246812785f3366cf04661d7b80dfaa095185c600f598523aac60b",
                          "typeString": "literal_string \"rootState already created\""
                        }
                      ],
                      "id": 2540,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4226:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4226:102:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2553,
                  "nodeType": "ExpressionStatement",
                  "src": "4226:102:4"
                },
                {
                  "assignments": [
                    2555
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2555,
                      "mutability": "mutable",
                      "name": "i",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2629,
                      "src": "4333:9:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2554,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4333:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2557,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 2556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4345:1:4",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4333:13:4"
                },
                {
                  "body": {
                    "id": 2575,
                    "nodeType": "Block",
                    "src": "4408:51:4",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 2572,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2568,
                              "name": "activeBlockchains",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2363,
                              "src": "4417:17:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                "typeString": "bytes32[] storage ref"
                              }
                            },
                            "id": 2570,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2569,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2555,
                              "src": "4435:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4417:20:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2571,
                            "name": "idHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2521,
                            "src": "4441:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "4417:30:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2574,
                        "nodeType": "IfStatement",
                        "src": "4413:41:4",
                        "trueBody": {
                          "id": 2573,
                          "nodeType": "Break",
                          "src": "4449:5:4"
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2564,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2559,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "4357:12:4",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 2558,
                        "name": "isRootState",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2530,
                        "src": "4358:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2563,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2560,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2555,
                        "src": "4373:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2561,
                          "name": "activeBlockchains",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2363,
                          "src": "4377:17:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                            "typeString": "bytes32[] storage ref"
                          }
                        },
                        "id": 2562,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4377:24:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "4373:28:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4357:44:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2576,
                  "initializationExpression": null,
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2566,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4403:3:4",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 2565,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2555,
                        "src": "4403:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2567,
                    "nodeType": "ExpressionStatement",
                    "src": "4403:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "4350:109:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2583,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2578,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "4489:12:4",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 2577,
                        "name": "isRootState",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2530,
                        "src": "4490:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2582,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2579,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2555,
                        "src": "4505:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2580,
                          "name": "activeBlockchains",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2363,
                          "src": "4510:17:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                            "typeString": "bytes32[] storage ref"
                          }
                        },
                        "id": 2581,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4510:24:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "4505:29:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4489:45:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2591,
                  "nodeType": "IfStatement",
                  "src": "4485:91:4",
                  "trueBody": {
                    "id": 2590,
                    "nodeType": "Block",
                    "src": "4536:40:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2587,
                              "name": "idHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2521,
                              "src": "4564:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2584,
                              "name": "activeBlockchains",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2363,
                              "src": "4541:17:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                "typeString": "bytes32[] storage ref"
                              }
                            },
                            "id": 2586,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "4541:22:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_bytes32_$returns$__$",
                              "typeString": "function (bytes32)"
                            }
                          },
                          "id": 2588,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4541:30:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2589,
                        "nodeType": "ExpressionStatement",
                        "src": "4541:30:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 2592,
                    "name": "isRootState",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2530,
                    "src": "4584:11:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2599,
                  "nodeType": "IfStatement",
                  "src": "4580:77:4",
                  "trueBody": {
                    "id": 2598,
                    "nodeType": "Block",
                    "src": "4597:60:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2594,
                              "name": "totalSupplyHistory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3379,
                              "src": "4619:18:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                                "typeString": "uint256[] storage ref"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2595,
                              "name": "_totalSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2515,
                              "src": "4639:12:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                                "typeString": "uint256[] storage ref"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2593,
                            "name": "updateValueAtNow",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3858,
                            "src": "4602:16:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256[] storage pointer,uint256)"
                            }
                          },
                          "id": 2596,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4602:50:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2597,
                        "nodeType": "ExpressionStatement",
                        "src": "4602:50:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2601
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2601,
                      "mutability": "mutable",
                      "name": "state",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2629,
                      "src": "4661:28:4",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_BlockchainState_$2341_memory_ptr",
                        "typeString": "struct GReputation.BlockchainState"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2600,
                        "name": "BlockchainState",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2341,
                        "src": "4661:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                          "typeString": "struct GReputation.BlockchainState"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2602,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4661:28:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2603,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2601,
                        "src": "4693:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BlockchainState_$2341_memory_ptr",
                          "typeString": "struct GReputation.BlockchainState memory"
                        }
                      },
                      "id": 2605,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "stateHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2330,
                      "src": "4693:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2606,
                      "name": "_hash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2513,
                      "src": "4711:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4693:23:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 2608,
                  "nodeType": "ExpressionStatement",
                  "src": "4693:23:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2613,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2609,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2601,
                        "src": "4720:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BlockchainState_$2341_memory_ptr",
                          "typeString": "struct GReputation.BlockchainState memory"
                        }
                      },
                      "id": 2611,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2334,
                      "src": "4720:17:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2612,
                      "name": "_totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2515,
                      "src": "4740:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4720:32:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2614,
                  "nodeType": "ExpressionStatement",
                  "src": "4720:32:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2620,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2615,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2601,
                        "src": "4756:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BlockchainState_$2341_memory_ptr",
                          "typeString": "struct GReputation.BlockchainState memory"
                        }
                      },
                      "id": 2617,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "blockNumber",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2336,
                      "src": "4756:17:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2618,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "4776:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 2619,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "number",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4776:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4756:32:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2621,
                  "nodeType": "ExpressionStatement",
                  "src": "4756:32:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2626,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2601,
                        "src": "4822:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BlockchainState_$2341_memory_ptr",
                          "typeString": "struct GReputation.BlockchainState memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_BlockchainState_$2341_memory_ptr",
                          "typeString": "struct GReputation.BlockchainState memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2622,
                          "name": "blockchainStates",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2352,
                          "src": "4792:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_$",
                            "typeString": "mapping(bytes32 => struct GReputation.BlockchainState storage ref[] storage ref)"
                          }
                        },
                        "id": 2624,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2623,
                          "name": "idHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2521,
                          "src": "4809:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4792:24:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage",
                          "typeString": "struct GReputation.BlockchainState storage ref[] storage ref"
                        }
                      },
                      "id": 2625,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4792:29:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_BlockchainState_$2341_storage_$returns$__$",
                        "typeString": "function (struct GReputation.BlockchainState storage ref)"
                      }
                    },
                    "id": 2627,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4792:36:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2628,
                  "nodeType": "ExpressionStatement",
                  "src": "4792:36:4"
                }
              ]
            },
            "documentation": {
              "id": 2509,
              "nodeType": "StructuredDocumentation",
              "src": "3654:276:4",
              "text": "@notice sets the state hash of a blockchain, can only be called by owner\n @param _id the string name of the blockchain (will be hashed to produce byte32 id)\n @param _hash the state hash\n @param _totalSupply total supply of reputation on the specific blockchain"
            },
            "functionSelector": "17aeda02",
            "id": 2630,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 2518,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2517,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 7818,
                  "src": "4036:9:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4036:9:4"
              }
            ],
            "name": "setBlockchainStateHash",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2511,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2630,
                  "src": "3967:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2510,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3967:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2513,
                  "mutability": "mutable",
                  "name": "_hash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2630,
                  "src": "3988:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2512,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3988:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2515,
                  "mutability": "mutable",
                  "name": "_totalSupply",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2630,
                  "src": "4005:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2514,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4005:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3963:65:4"
            },
            "returnParameters": {
              "id": 2519,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4046:0:4"
            },
            "scope": 3347,
            "src": "3932:900:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2682,
              "nodeType": "Block",
              "src": "5280:336:4",
              "statements": [
                {
                  "assignments": [
                    2643
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2643,
                      "mutability": "mutable",
                      "name": "startingBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2682,
                      "src": "5284:23:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2642,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5284:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2650,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2645,
                          "name": "activeVotes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2374,
                          "src": "5321:11:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
                            "typeString": "mapping(address => uint256[] storage ref)"
                          }
                        },
                        "id": 2647,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2646,
                          "name": "_user",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2633,
                          "src": "5333:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5321:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                          "typeString": "uint256[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2648,
                        "name": "_blockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2637,
                        "src": "5341:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                          "typeString": "uint256[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2644,
                      "name": "getValueAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3770,
                      "src": "5310:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256[] storage pointer,uint256) view returns (uint256)"
                      }
                    },
                    "id": 2649,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5310:44:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5284:70:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 2651,
                    "name": "_global",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2635,
                    "src": "5363:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2679,
                  "nodeType": "IfStatement",
                  "src": "5359:227:4",
                  "trueBody": {
                    "id": 2678,
                    "nodeType": "Block",
                    "src": "5372:214:4",
                    "statements": [
                      {
                        "body": {
                          "id": 2676,
                          "nodeType": "Block",
                          "src": "5432:150:4",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2674,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2663,
                                  "name": "startingBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2643,
                                  "src": "5438:15:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "id": 2667,
                                            "name": "activeBlockchains",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2363,
                                            "src": "5510:17:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                              "typeString": "bytes32[] storage ref"
                                            }
                                          },
                                          "id": 2669,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 2668,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2653,
                                            "src": "5528:1:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "5510:20:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 2670,
                                          "name": "_user",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2633,
                                          "src": "5538:5:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 2671,
                                          "name": "_blockNumber",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2637,
                                          "src": "5551:12:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          },
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 2666,
                                        "name": "getVotesAtBlockchain",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2864,
                                        "src": "5482:20:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                                          "typeString": "function (bytes32,address,uint256) view returns (uint256)"
                                        }
                                      },
                                      "id": 2672,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5482:88:4",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2664,
                                      "name": "startingBalance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2643,
                                      "src": "5456:15:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2665,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 7973,
                                    "src": "5456:19:4",
                                    "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": 2673,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "5456:120:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5438:138:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2675,
                              "nodeType": "ExpressionStatement",
                              "src": "5438:138:4"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2659,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2656,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2653,
                            "src": "5397:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2657,
                              "name": "activeBlockchains",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2363,
                              "src": "5401:17:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                "typeString": "bytes32[] storage ref"
                              }
                            },
                            "id": 2658,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "5401:24:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5397:28:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2677,
                        "initializationExpression": {
                          "assignments": [
                            2653
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 2653,
                              "mutability": "mutable",
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "overrides": null,
                              "scope": 2677,
                              "src": "5382:9:4",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 2652,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "5382:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 2655,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2654,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5394:1:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "5382:13:4"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 2661,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "5427:3:4",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 2660,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2653,
                              "src": "5427:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2662,
                          "nodeType": "ExpressionStatement",
                          "src": "5427:3:4"
                        },
                        "nodeType": "ForStatement",
                        "src": "5377:205:4"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2680,
                    "name": "startingBalance",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2643,
                    "src": "5597:15:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2641,
                  "id": 2681,
                  "nodeType": "Return",
                  "src": "5590:22:4"
                }
              ]
            },
            "documentation": {
              "id": 2631,
              "nodeType": "StructuredDocumentation",
              "src": "4835:333:4",
              "text": "@notice get the number of active votes a user holds after delegation (vs the basic balance of reputation he holds)\n @param _user the user to get active votes for\n @param _global wether to include reputation from other blockchains\n @param _blockNumber get votes state at specific block\n @return the number of votes"
            },
            "functionSelector": "a265ba46",
            "id": 2683,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVotesAt",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2638,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2633,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2683,
                  "src": "5193:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2632,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5193:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2635,
                  "mutability": "mutable",
                  "name": "_global",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2683,
                  "src": "5210:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2634,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5210:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2637,
                  "mutability": "mutable",
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2683,
                  "src": "5226:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2636,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5226:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5189:60:4"
            },
            "returnParameters": {
              "id": 2641,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2640,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2683,
                  "src": "5271:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2639,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5271:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5270:9:4"
            },
            "scope": 3347,
            "src": "5170:446:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2698,
              "nodeType": "Block",
              "src": "5851:52:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2692,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2686,
                        "src": "5873:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 2693,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5880:4:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2694,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "5886:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 2695,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5886:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2691,
                      "name": "getVotesAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2683,
                        2716
                      ],
                      "referencedDeclaration": 2683,
                      "src": "5862:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,bool,uint256) view returns (uint256)"
                      }
                    },
                    "id": 2696,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5862:37:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2690,
                  "id": 2697,
                  "nodeType": "Return",
                  "src": "5855:44:4"
                }
              ]
            },
            "documentation": {
              "id": 2684,
              "nodeType": "StructuredDocumentation",
              "src": "5619:167:4",
              "text": " @notice returns aggregated active votes in all blockchains and delegated\n @param _user the user to get active votes for\n @return the number of votes"
            },
            "functionSelector": "9ab24eb0",
            "id": 2699,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVotes",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2687,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2686,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2699,
                  "src": "5806:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2685,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5806:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5805:15:4"
            },
            "returnParameters": {
              "id": 2690,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2689,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2699,
                  "src": "5842:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2688,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5842:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5841:9:4"
            },
            "scope": 3347,
            "src": "5788:115:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2715,
              "nodeType": "Block",
              "src": "6241:52:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2710,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2702,
                        "src": "6263:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "74727565",
                        "id": 2711,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6270:4:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2712,
                        "name": "_blockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2704,
                        "src": "6276:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2709,
                      "name": "getVotesAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2683,
                        2716
                      ],
                      "referencedDeclaration": 2683,
                      "src": "6252:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,bool,uint256) view returns (uint256)"
                      }
                    },
                    "id": 2713,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6252:37:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2708,
                  "id": 2714,
                  "nodeType": "Return",
                  "src": "6245:44:4"
                }
              ]
            },
            "documentation": {
              "id": 2700,
              "nodeType": "StructuredDocumentation",
              "src": "5906:239:4",
              "text": " @notice returns aggregated active votes in all blockchains and delegated at specific block\n @param _user user to get active votes for\n @param _blockNumber get votes state at specific block\n @return the number of votes"
            },
            "functionSelector": "9324bffa",
            "id": 2716,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVotesAt",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2705,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2702,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2716,
                  "src": "6167:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2701,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6167:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2704,
                  "mutability": "mutable",
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2716,
                  "src": "6182:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2703,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6182:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6166:37:4"
            },
            "returnParameters": {
              "id": 2708,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2707,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2716,
                  "src": "6231:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2706,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6231:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6230:9:4"
            },
            "scope": 3347,
            "src": "6147:146:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2729,
              "nodeType": "Block",
              "src": "6555:48:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2726,
                        "name": "_blockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2719,
                        "src": "6586:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2724,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "6566:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GReputation_$3347",
                          "typeString": "contract super GReputation"
                        }
                      },
                      "id": 2725,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupplyAt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3661,
                      "src": "6566:19:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 2727,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6566:33:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2723,
                  "id": 2728,
                  "nodeType": "Return",
                  "src": "6559:40:4"
                }
              ]
            },
            "documentation": {
              "id": 2717,
              "nodeType": "StructuredDocumentation",
              "src": "6296:172:4",
              "text": " @notice returns total supply in current blockchain (super.balanceOfAt)\n @param _blockNumber get total supply at specific block\n @return the totaly supply"
            },
            "functionSelector": "f2a035e2",
            "id": 2730,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupplyLocal",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2720,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2719,
                  "mutability": "mutable",
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2730,
                  "src": "6496:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2718,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6496:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6495:22:4"
            },
            "returnParameters": {
              "id": 2723,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2722,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2730,
                  "src": "6545:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2721,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6545:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6544:9:4"
            },
            "scope": 3347,
            "src": "6470:133:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              3661
            ],
            "body": {
              "id": 2773,
              "nodeType": "Block",
              "src": "6860:264:4",
              "statements": [
                {
                  "assignments": [
                    2740
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2740,
                      "mutability": "mutable",
                      "name": "startingSupply",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2773,
                      "src": "6864:22:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2739,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6864:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2745,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2743,
                        "name": "_blockNumber",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2733,
                        "src": "6909:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2741,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "6889:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GReputation_$3347",
                          "typeString": "contract super GReputation"
                        }
                      },
                      "id": 2742,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupplyAt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3661,
                      "src": "6889:19:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 2744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6889:33:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6864:58:4"
                },
                {
                  "body": {
                    "id": 2769,
                    "nodeType": "Block",
                    "src": "6981:115:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2767,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2757,
                            "name": "startingSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2740,
                            "src": "6986:14:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 2761,
                                      "name": "activeBlockchains",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2363,
                                      "src": "7051:17:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                                        "typeString": "bytes32[] storage ref"
                                      }
                                    },
                                    "id": 2763,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 2762,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2747,
                                      "src": "7069:1:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "7051:20:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 2764,
                                    "name": "_blockNumber",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2733,
                                    "src": "7073:12:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2760,
                                  "name": "totalSupplyAtBlockchain",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2940,
                                  "src": "7027:23:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (bytes32,uint256) view returns (uint256)"
                                  }
                                },
                                "id": 2765,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7027:59:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 2758,
                                "name": "startingSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2740,
                                "src": "7003:14:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2759,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7973,
                              "src": "7003:18:4",
                              "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": 2766,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7003:88:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6986:105:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2768,
                        "nodeType": "ExpressionStatement",
                        "src": "6986:105:4"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2750,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2747,
                      "src": "6946:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2751,
                        "name": "activeBlockchains",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2363,
                        "src": "6950:17:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage",
                          "typeString": "bytes32[] storage ref"
                        }
                      },
                      "id": 2752,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6950:24:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6946:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2770,
                  "initializationExpression": {
                    "assignments": [
                      2747
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 2747,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2770,
                        "src": "6931:9:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2746,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6931:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 2749,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2748,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6943:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "6931:13:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2755,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6976:3:4",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 2754,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2747,
                        "src": "6976:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2756,
                    "nodeType": "ExpressionStatement",
                    "src": "6976:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "6926:170:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2771,
                    "name": "startingSupply",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2740,
                    "src": "7106:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2738,
                  "id": 2772,
                  "nodeType": "Return",
                  "src": "7099:21:4"
                }
              ]
            },
            "documentation": {
              "id": 2731,
              "nodeType": "StructuredDocumentation",
              "src": "6606:159:4",
              "text": " @notice returns total supply in all blockchain aggregated\n @param _blockNumber get total supply at specific block\n @return the totaly supply"
            },
            "functionSelector": "981b24d0",
            "id": 2774,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupplyAt",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 2735,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6830:8:4"
            },
            "parameters": {
              "id": 2734,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2733,
                  "mutability": "mutable",
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2774,
                  "src": "6790:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2732,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6790:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6789:22:4"
            },
            "returnParameters": {
              "id": 2738,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2737,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2774,
                  "src": "6850:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2736,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6850:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6849:9:4"
            },
            "scope": 3347,
            "src": "6767:357:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2863,
              "nodeType": "Block",
              "src": "7546:380:4",
              "statements": [
                {
                  "assignments": [
                    2789
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2789,
                      "mutability": "mutable",
                      "name": "states",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2863,
                      "src": "7550:32:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                        "typeString": "struct GReputation.BlockchainState[]"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 2787,
                          "name": "BlockchainState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2341,
                          "src": "7550:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                            "typeString": "struct GReputation.BlockchainState"
                          }
                        },
                        "id": 2788,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "7550:17:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                          "typeString": "struct GReputation.BlockchainState[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2793,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2790,
                      "name": "blockchainStates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2352,
                      "src": "7585:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_$",
                        "typeString": "mapping(bytes32 => struct GReputation.BlockchainState storage ref[] storage ref)"
                      }
                    },
                    "id": 2792,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2791,
                      "name": "_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2777,
                      "src": "7602:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7585:21:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage",
                      "typeString": "struct GReputation.BlockchainState storage ref[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7550:56:4"
                },
                {
                  "assignments": [
                    2795
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2795,
                      "mutability": "mutable",
                      "name": "i",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2863,
                      "src": "7610:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "typeName": {
                        "id": 2794,
                        "name": "int256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7610:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2801,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2798,
                          "name": "states",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2789,
                          "src": "7628:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                            "typeString": "struct GReputation.BlockchainState storage ref[] storage pointer"
                          }
                        },
                        "id": 2799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7628:13:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2797,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "7621:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_int256_$",
                        "typeString": "type(int256)"
                      },
                      "typeName": {
                        "id": 2796,
                        "name": "int256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7621:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 2800,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7621:21:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7610:32:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 2804,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2802,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2795,
                      "src": "7651:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2803,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7656:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7651:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2807,
                  "nodeType": "IfStatement",
                  "src": "7647:20:4",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2805,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7666:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 2785,
                    "id": 2806,
                    "nodeType": "Return",
                    "src": "7659:8:4"
                  }
                },
                {
                  "assignments": [
                    2809
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2809,
                      "mutability": "mutable",
                      "name": "state",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2863,
                      "src": "7671:29:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                        "typeString": "struct GReputation.BlockchainState"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2808,
                        "name": "BlockchainState",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2341,
                        "src": "7671:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                          "typeString": "struct GReputation.BlockchainState"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2818,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2810,
                      "name": "states",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2789,
                      "src": "7703:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                        "typeString": "struct GReputation.BlockchainState storage ref[] storage pointer"
                      }
                    },
                    "id": 2817,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 2815,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2813,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2795,
                            "src": "7718:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 2814,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7722:1:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "7718:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        ],
                        "id": 2812,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7710:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 2811,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7710:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 2816,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7710:14:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7703:22:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_BlockchainState_$2341_storage",
                      "typeString": "struct GReputation.BlockchainState storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7671:54:4"
                },
                {
                  "body": {
                    "id": 2848,
                    "nodeType": "Block",
                    "src": "7758:89:4",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2834,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2831,
                              "name": "state",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2809,
                              "src": "7767:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                                "typeString": "struct GReputation.BlockchainState storage pointer"
                              }
                            },
                            "id": 2832,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "blockNumber",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2336,
                            "src": "7767:17:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2833,
                            "name": "_blockNumber",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2781,
                            "src": "7788:12:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7767:33:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2836,
                        "nodeType": "IfStatement",
                        "src": "7763:44:4",
                        "trueBody": {
                          "id": 2835,
                          "nodeType": "Break",
                          "src": "7802:5:4"
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2846,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2837,
                            "name": "state",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2809,
                            "src": "7812:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                              "typeString": "struct GReputation.BlockchainState storage pointer"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2838,
                              "name": "states",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2789,
                              "src": "7820:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                                "typeString": "struct GReputation.BlockchainState storage ref[] storage pointer"
                              }
                            },
                            "id": 2845,
                            "indexExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  },
                                  "id": 2843,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 2841,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2795,
                                    "src": "7835:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 2842,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7839:1:4",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "7835:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                ],
                                "id": 2840,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "7827:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 2839,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7827:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 2844,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7827:14:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7820:22:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_BlockchainState_$2341_storage",
                              "typeString": "struct GReputation.BlockchainState storage ref"
                            }
                          },
                          "src": "7812:30:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                            "typeString": "struct GReputation.BlockchainState storage pointer"
                          }
                        },
                        "id": 2847,
                        "nodeType": "ExpressionStatement",
                        "src": "7812:30:4"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 2827,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2825,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2795,
                      "src": "7745:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2826,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7750:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7745:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2849,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2823,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 2819,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2795,
                        "src": "7734:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "id": 2822,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2820,
                          "name": "i",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2795,
                          "src": "7738:1:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 2821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7742:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "7738:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "src": "7734:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "id": 2824,
                    "nodeType": "ExpressionStatement",
                    "src": "7734:9:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2829,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "--",
                      "prefix": false,
                      "src": "7753:3:4",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 2828,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2795,
                        "src": "7753:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "id": 2830,
                    "nodeType": "ExpressionStatement",
                    "src": "7753:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "7729:118:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 2852,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2850,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2795,
                      "src": "7854:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2851,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7858:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7854:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2855,
                  "nodeType": "IfStatement",
                  "src": "7850:19:4",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2853,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7868:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 2785,
                    "id": 2854,
                    "nodeType": "Return",
                    "src": "7861:8:4"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 2856,
                        "name": "stateHashBalances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2359,
                        "src": "7881:17:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_uint256_$_$",
                          "typeString": "mapping(bytes32 => mapping(address => uint256))"
                        }
                      },
                      "id": 2859,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2857,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2809,
                          "src": "7899:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                            "typeString": "struct GReputation.BlockchainState storage pointer"
                          }
                        },
                        "id": 2858,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "stateHash",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2330,
                        "src": "7899:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "7881:34:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 2861,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2860,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2779,
                      "src": "7916:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7881:41:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2785,
                  "id": 2862,
                  "nodeType": "Return",
                  "src": "7874:48:4"
                }
              ]
            },
            "documentation": {
              "id": 2775,
              "nodeType": "StructuredDocumentation",
              "src": "7127:298:4",
              "text": "@notice get the number of active votes a user holds after delegation in specific blockchain\n @param _id the keccak hash of the blockchain string id\n @param _user the user to get active votes for\n @param _blockNumber get votes state at specific block\n @return the number of votes"
            },
            "functionSelector": "18a1851f",
            "id": 2864,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getVotesAtBlockchain",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2782,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2777,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2864,
                  "src": "7460:11:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2776,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7460:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2779,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2864,
                  "src": "7475:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2778,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7475:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2781,
                  "mutability": "mutable",
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2864,
                  "src": "7492:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2780,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7492:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7456:59:4"
            },
            "returnParameters": {
              "id": 2785,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2784,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2864,
                  "src": "7537:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2783,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7537:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7536:9:4"
            },
            "scope": 3347,
            "src": "7427:499:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2939,
              "nodeType": "Block",
              "src": "8191:337:4",
              "statements": [
                {
                  "assignments": [
                    2877
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2877,
                      "mutability": "mutable",
                      "name": "states",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2939,
                      "src": "8195:32:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                        "typeString": "struct GReputation.BlockchainState[]"
                      },
                      "typeName": {
                        "baseType": {
                          "contractScope": null,
                          "id": 2875,
                          "name": "BlockchainState",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2341,
                          "src": "8195:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                            "typeString": "struct GReputation.BlockchainState"
                          }
                        },
                        "id": 2876,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "8195:17:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                          "typeString": "struct GReputation.BlockchainState[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2881,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2878,
                      "name": "blockchainStates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2352,
                      "src": "8230:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_$",
                        "typeString": "mapping(bytes32 => struct GReputation.BlockchainState storage ref[] storage ref)"
                      }
                    },
                    "id": 2880,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 2879,
                      "name": "_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2867,
                      "src": "8247:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8230:21:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage",
                      "typeString": "struct GReputation.BlockchainState storage ref[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8195:56:4"
                },
                {
                  "assignments": [
                    2883
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2883,
                      "mutability": "mutable",
                      "name": "i",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2939,
                      "src": "8255:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "typeName": {
                        "id": 2882,
                        "name": "int256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8255:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2884,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8255:8:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2888,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 2885,
                        "name": "states",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2877,
                        "src": "8271:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                          "typeString": "struct GReputation.BlockchainState storage ref[] storage pointer"
                        }
                      },
                      "id": 2886,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "8271:13:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2887,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8288:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8271:18:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2891,
                  "nodeType": "IfStatement",
                  "src": "8267:32:4",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2889,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8298:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 2873,
                    "id": 2890,
                    "nodeType": "Return",
                    "src": "8291:8:4"
                  }
                },
                {
                  "body": {
                    "id": 2919,
                    "nodeType": "Block",
                    "src": "8352:67:4",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2916,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2908,
                                "name": "states",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2877,
                                "src": "8361:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                                  "typeString": "struct GReputation.BlockchainState storage ref[] storage pointer"
                                }
                              },
                              "id": 2913,
                              "indexExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2911,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2883,
                                    "src": "8376:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 2910,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "8368:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 2909,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8368:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 2912,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8368:10:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "8361:18:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_BlockchainState_$2341_storage",
                                "typeString": "struct GReputation.BlockchainState storage ref"
                              }
                            },
                            "id": 2914,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "blockNumber",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2336,
                            "src": "8361:30:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2915,
                            "name": "_blockNumber",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2869,
                            "src": "8395:12:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8361:46:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2918,
                        "nodeType": "IfStatement",
                        "src": "8357:57:4",
                        "trueBody": {
                          "id": 2917,
                          "nodeType": "Break",
                          "src": "8409:5:4"
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 2904,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2902,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2883,
                      "src": "8339:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2903,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8344:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8339:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2920,
                  "initializationExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2900,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 2892,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2883,
                        "src": "8308:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2898,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2895,
                                "name": "states",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2877,
                                "src": "8319:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                                  "typeString": "struct GReputation.BlockchainState storage ref[] storage pointer"
                                }
                              },
                              "id": 2896,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8319:13:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 2897,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8335:1:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "8319:17:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 2894,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8312:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_int256_$",
                            "typeString": "type(int256)"
                          },
                          "typeName": {
                            "id": 2893,
                            "name": "int256",
                            "nodeType": "ElementaryTypeName",
                            "src": "8312:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 2899,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8312:25:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "src": "8308:29:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "id": 2901,
                    "nodeType": "ExpressionStatement",
                    "src": "8308:29:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2906,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "--",
                      "prefix": false,
                      "src": "8347:3:4",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 2905,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2883,
                        "src": "8347:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "id": 2907,
                    "nodeType": "ExpressionStatement",
                    "src": "8347:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "8303:116:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 2923,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2921,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2883,
                      "src": "8426:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2922,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8430:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8426:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2926,
                  "nodeType": "IfStatement",
                  "src": "8422:19:4",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2924,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8440:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 2873,
                    "id": 2925,
                    "nodeType": "Return",
                    "src": "8433:8:4"
                  }
                },
                {
                  "assignments": [
                    2928
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2928,
                      "mutability": "mutable",
                      "name": "state",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 2939,
                      "src": "8446:29:4",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                        "typeString": "struct GReputation.BlockchainState"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2927,
                        "name": "BlockchainState",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2341,
                        "src": "8446:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                          "typeString": "struct GReputation.BlockchainState"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2935,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 2929,
                      "name": "states",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2877,
                      "src": "8478:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_ptr",
                        "typeString": "struct GReputation.BlockchainState storage ref[] storage pointer"
                      }
                    },
                    "id": 2934,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2932,
                          "name": "i",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2883,
                          "src": "8493:1:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        ],
                        "id": 2931,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8485:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 2930,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8485:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 2933,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8485:10:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8478:18:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_BlockchainState_$2341_storage",
                      "typeString": "struct GReputation.BlockchainState storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8446:50:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2936,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2928,
                      "src": "8507:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_BlockchainState_$2341_storage_ptr",
                        "typeString": "struct GReputation.BlockchainState storage pointer"
                      }
                    },
                    "id": 2937,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "totalSupply",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2334,
                    "src": "8507:17:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2873,
                  "id": 2938,
                  "nodeType": "Return",
                  "src": "8500:24:4"
                }
              ]
            },
            "documentation": {
              "id": 2865,
              "nodeType": "StructuredDocumentation",
              "src": "7929:155:4",
              "text": " @notice returns total supply in a specific blockchain\n @param _blockNumber get total supply at specific block\n @return the totaly supply"
            },
            "functionSelector": "05bc9e84",
            "id": 2940,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupplyAtBlockchain",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2870,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2867,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2940,
                  "src": "8119:11:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2866,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8119:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2869,
                  "mutability": "mutable",
                  "name": "_blockNumber",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2940,
                  "src": "8132:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2868,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8132:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8118:35:4"
            },
            "returnParameters": {
              "id": 2873,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2872,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2940,
                  "src": "8181:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2871,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8181:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8180:9:4"
            },
            "scope": 3347,
            "src": "8086:442:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3038,
              "nodeType": "Block",
              "src": "9153:787:4",
              "statements": [
                {
                  "assignments": [
                    2956
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2956,
                      "mutability": "mutable",
                      "name": "idHash",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3038,
                      "src": "9157:14:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2955,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "9157:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2963,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2960,
                            "name": "_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2943,
                            "src": "9190:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "id": 2959,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9184:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": {
                            "id": 2958,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "9184:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 2961,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9184:10:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2957,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "9174:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 2962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9174:21:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9157:38:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2970,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2965,
                              "name": "blockchainStates",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2352,
                              "src": "9211:16:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_$",
                                "typeString": "mapping(bytes32 => struct GReputation.BlockchainState storage ref[] storage ref)"
                              }
                            },
                            "id": 2967,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2966,
                              "name": "idHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2956,
                              "src": "9228:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9211:24:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage",
                              "typeString": "struct GReputation.BlockchainState storage ref[] storage ref"
                            }
                          },
                          "id": 2968,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9211:31:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2969,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9245:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "9211:35:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "6e6f20737461746520666f756e6420666f7220676976656e205f6964",
                        "id": 2971,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9251:30:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_bd2561b8d6c3f18da1998f54f8f432a2d001e0c77a47fd54aad3fa99f15b42f7",
                          "typeString": "literal_string \"no state found for given _id\""
                        },
                        "value": "no state found for given _id"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_bd2561b8d6c3f18da1998f54f8f432a2d001e0c77a47fd54aad3fa99f15b42f7",
                          "typeString": "literal_string \"no state found for given _id\""
                        }
                      ],
                      "id": 2964,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9199:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2972,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9199:86:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2973,
                  "nodeType": "ExpressionStatement",
                  "src": "9199:86:4"
                },
                {
                  "assignments": [
                    2975
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2975,
                      "mutability": "mutable",
                      "name": "stateHash",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3038,
                      "src": "9289:17:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2974,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "9289:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2987,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2976,
                          "name": "blockchainStates",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2352,
                          "src": "9312:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_$",
                            "typeString": "mapping(bytes32 => struct GReputation.BlockchainState storage ref[] storage ref)"
                          }
                        },
                        "id": 2978,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 2977,
                          "name": "idHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2956,
                          "src": "9329:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9312:24:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage",
                          "typeString": "struct GReputation.BlockchainState storage ref[] storage ref"
                        }
                      },
                      "id": 2985,
                      "indexExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2984,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2979,
                              "name": "blockchainStates",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2352,
                              "src": "9337:16:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage_$",
                                "typeString": "mapping(bytes32 => struct GReputation.BlockchainState storage ref[] storage ref)"
                              }
                            },
                            "id": 2981,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2980,
                              "name": "idHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2956,
                              "src": "9354:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9337:24:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_BlockchainState_$2341_storage_$dyn_storage",
                              "typeString": "struct GReputation.BlockchainState storage ref[] storage ref"
                            }
                          },
                          "id": 2982,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9337:31:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 2983,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9371:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "9337:35:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9312:61:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_BlockchainState_$2341_storage",
                        "typeString": "struct GReputation.BlockchainState storage ref"
                      }
                    },
                    "id": 2986,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "stateHash",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2330,
                    "src": "9312:76:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9289:99:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2989,
                              "name": "stateHashBalances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2359,
                              "src": "9496:17:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(bytes32 => mapping(address => uint256))"
                              }
                            },
                            "id": 2991,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2990,
                              "name": "stateHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2975,
                              "src": "9514:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9496:28:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 2993,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 2992,
                            "name": "_user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2945,
                            "src": "9525:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9496:35:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2994,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9535:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "9496:40:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "73746174654861736820616c72656164792070726f766564",
                        "id": 2996,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9541:26:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_861c53c08650cee39afd8a8fce3792ae7bfaeb2432dd1d76cec73c7678cfd784",
                          "typeString": "literal_string \"stateHash already proved\""
                        },
                        "value": "stateHash already proved"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_861c53c08650cee39afd8a8fce3792ae7bfaeb2432dd1d76cec73c7678cfd784",
                          "typeString": "literal_string \"stateHash already proved\""
                        }
                      ],
                      "id": 2988,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9484:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2997,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9484:87:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2998,
                  "nodeType": "ExpressionStatement",
                  "src": "9484:87:4"
                },
                {
                  "assignments": [
                    null,
                    3000
                  ],
                  "declarations": [
                    null,
                    {
                      "constant": false,
                      "id": 3000,
                      "mutability": "mutable",
                      "name": "isProofValid",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3038,
                      "src": "9579:17:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 2999,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "9579:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3007,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3002,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2945,
                        "src": "9621:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3003,
                        "name": "_balance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2947,
                        "src": "9628:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3004,
                        "name": "stateHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2975,
                        "src": "9638:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3005,
                        "name": "_proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2950,
                        "src": "9649:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      ],
                      "id": 3001,
                      "name": "_checkMerkleProof",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3333,
                      "src": "9603:17:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$_t_bytes32_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_bytes32_$_t_bool_$",
                        "typeString": "function (address,uint256,bytes32,bytes32[] memory) pure returns (bytes32,bool)"
                      }
                    },
                    "id": 3006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9603:53:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bytes32_$_t_bool_$",
                      "typeString": "tuple(bytes32,bool)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9576:80:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3009,
                        "name": "isProofValid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3000,
                        "src": "9668:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "696e76616c6964206d65726b6c652070726f6f66",
                        "id": 3010,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9682:22:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_25f2e616fb4e39869325d77f95859ffc4bf04bfb15d3a74a1e599c611657a20e",
                          "typeString": "literal_string \"invalid merkle proof\""
                        },
                        "value": "invalid merkle proof"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_25f2e616fb4e39869325d77f95859ffc4bf04bfb15d3a74a1e599c611657a20e",
                          "typeString": "literal_string \"invalid merkle proof\""
                        }
                      ],
                      "id": 3008,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9660:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9660:45:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3012,
                  "nodeType": "ExpressionStatement",
                  "src": "9660:45:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 3020,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3013,
                      "name": "idHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2956,
                      "src": "9758:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "726f6f745374617465",
                              "id": 3017,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9784:11:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_0df2f1ec68f7ac2e4205051c96e8cfd7b54c89c139839c13d3d59548ae1488a1",
                                "typeString": "literal_string \"rootState\""
                              },
                              "value": "rootState"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_0df2f1ec68f7ac2e4205051c96e8cfd7b54c89c139839c13d3d59548ae1488a1",
                                "typeString": "literal_string \"rootState\""
                              }
                            ],
                            "id": 3016,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9778:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 3015,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "9778:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 3018,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9778:18:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 3014,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "9768:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 3019,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9768:29:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "9758:39:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3027,
                  "nodeType": "IfStatement",
                  "src": "9754:77:4",
                  "trueBody": {
                    "id": 3026,
                    "nodeType": "Block",
                    "src": "9799:32:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3022,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2945,
                              "src": "9810:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3023,
                              "name": "_balance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2947,
                              "src": "9817:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3021,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              2446
                            ],
                            "referencedDeclaration": 2446,
                            "src": "9804:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (address,uint256) returns (uint256)"
                            }
                          },
                          "id": 3024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9804:22:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3025,
                        "nodeType": "ExpressionStatement",
                        "src": "9804:22:4"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3034,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3028,
                          "name": "stateHashBalances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2359,
                          "src": "9875:17:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(bytes32 => mapping(address => uint256))"
                          }
                        },
                        "id": 3031,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 3029,
                          "name": "stateHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2975,
                          "src": "9893:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9875:28:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 3032,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 3030,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2945,
                        "src": "9904:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9875:35:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3033,
                      "name": "_balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2947,
                      "src": "9913:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9875:46:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3035,
                  "nodeType": "ExpressionStatement",
                  "src": "9875:46:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 3036,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9932:4:4",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 2954,
                  "id": 3037,
                  "nodeType": "Return",
                  "src": "9925:11:4"
                }
              ]
            },
            "documentation": {
              "id": 2941,
              "nodeType": "StructuredDocumentation",
              "src": "8531:474:4",
              "text": " @notice prove user balance in a specific blockchain state hash\n @dev \"rootState\" is a special state that can be supplied once, and actually mints reputation on the current blockchain\n @param _id the string id of the blockchain we supply proof for\n @param _user the user to prove his balance\n @param _balance the balance we are prooving\n @param _proof array of byte32 with proof data (currently merkle tree path)\n @return true if proof is valid"
            },
            "functionSelector": "9adf01f7",
            "id": 3039,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "proveBalanceOfAtBlockchain",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2951,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2943,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3039,
                  "src": "9046:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2942,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "9046:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2945,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3039,
                  "src": "9067:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2944,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9067:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2947,
                  "mutability": "mutable",
                  "name": "_balance",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3039,
                  "src": "9084:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2946,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9084:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2950,
                  "mutability": "mutable",
                  "name": "_proof",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3039,
                  "src": "9104:23:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2948,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "9104:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 2949,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9104:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9042:88:4"
            },
            "returnParameters": {
              "id": 2954,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2953,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3039,
                  "src": "9147:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2952,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9147:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9146:6:4"
            },
            "scope": 3347,
            "src": "9007:933:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3051,
              "nodeType": "Block",
              "src": "10189:31:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 3047,
                      "name": "delegates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2368,
                      "src": "10200:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                        "typeString": "mapping(address => address)"
                      }
                    },
                    "id": 3049,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 3048,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3042,
                      "src": "10210:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "10200:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 3046,
                  "id": 3050,
                  "nodeType": "Return",
                  "src": "10193:23:4"
                }
              ]
            },
            "documentation": {
              "id": 3040,
              "nodeType": "StructuredDocumentation",
              "src": "9943:179:4",
              "text": "@notice returns current delegate of _user\n @param _user the delegatee\n @return the address of the delegate (can be _user  if no delegate or 0x0 if _user doesnt exists)"
            },
            "functionSelector": "8d22ea2a",
            "id": 3052,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "delegateOf",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3043,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3042,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3052,
                  "src": "10144:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3041,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10144:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10143:15:4"
            },
            "returnParameters": {
              "id": 3046,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3045,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3052,
                  "src": "10180:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3044,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10180:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10179:9:4"
            },
            "scope": 3347,
            "src": "10124:96:4",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3064,
              "nodeType": "Block",
              "src": "10358:49:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3059,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "10381:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3060,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10381:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3061,
                        "name": "_delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3055,
                        "src": "10393:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3058,
                      "name": "_delegateTo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3269,
                      "src": "10369:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 3062,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10369:34:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "functionReturnParameters": 3057,
                  "id": 3063,
                  "nodeType": "Return",
                  "src": "10362:41:4"
                }
              ]
            },
            "documentation": {
              "id": 3053,
              "nodeType": "StructuredDocumentation",
              "src": "10223:87:4",
              "text": "@notice delegate votes to another user\n @param _delegate the recipient of votes"
            },
            "functionSelector": "ac637c7a",
            "id": 3065,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "delegateTo",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3056,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3055,
                  "mutability": "mutable",
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3065,
                  "src": "10332:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3054,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10332:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10331:19:4"
            },
            "returnParameters": {
              "id": 3057,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10358:0:4"
            },
            "scope": 3347,
            "src": "10312:95:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3076,
              "nodeType": "Block",
              "src": "10513:50:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3070,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "10536:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3071,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10536:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3072,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "10548:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3073,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10548:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 3069,
                      "name": "_delegateTo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3269,
                      "src": "10524:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 3074,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10524:35:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "functionReturnParameters": 3068,
                  "id": 3075,
                  "nodeType": "Return",
                  "src": "10517:42:4"
                }
              ]
            },
            "documentation": {
              "id": 3066,
              "nodeType": "StructuredDocumentation",
              "src": "10410:72:4",
              "text": "@notice cancel user delegation\n @dev makes user his own delegate"
            },
            "functionSelector": "92ab89bb",
            "id": 3077,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "undelegate",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3067,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10503:2:4"
            },
            "returnParameters": {
              "id": 3068,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10513:0:4"
            },
            "scope": 3347,
            "src": "10484:79:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3178,
              "nodeType": "Block",
              "src": "11091:746:4",
              "statements": [
                {
                  "assignments": [
                    3094
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3094,
                      "mutability": "mutable",
                      "name": "domainSeparator",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3178,
                      "src": "11095:23:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3093,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11095:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3113,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3098,
                            "name": "DOMAIN_TYPEHASH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2322,
                            "src": "11156:15:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 3102,
                                    "name": "name",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2316,
                                    "src": "11194:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 3101,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "11188:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 3100,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "11188:5:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 3103,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11188:11:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 3099,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "11178:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 3104,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11178:22:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3105,
                              "name": "getChainId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3346,
                              "src": "11207:10:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint256_$",
                                "typeString": "function () pure returns (uint256)"
                              }
                            },
                            "id": 3106,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11207:12:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3109,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "11234:4:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_GReputation_$3347",
                                  "typeString": "contract GReputation"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_GReputation_$3347",
                                  "typeString": "contract GReputation"
                                }
                              ],
                              "id": 3108,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "11226:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 3107,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "11226:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 3110,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11226:13:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3096,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "11139:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 3097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encode",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "11139:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 3111,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11139:106:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 3095,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "11124:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3112,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11124:126:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11095:155:4"
                },
                {
                  "assignments": [
                    3115
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3115,
                      "mutability": "mutable",
                      "name": "structHash",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3178,
                      "src": "11254:18:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3114,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11254:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3125,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3119,
                            "name": "DELEGATION_TYPEHASH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2328,
                            "src": "11304:19:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3120,
                            "name": "_delegate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3080,
                            "src": "11325:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3121,
                            "name": "_nonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3082,
                            "src": "11336:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3122,
                            "name": "_expiry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3084,
                            "src": "11344:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3117,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "11293:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 3118,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encode",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "11293:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 3123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11293:59:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 3116,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "11278:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11278:79:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11254:103:4"
                },
                {
                  "assignments": [
                    3127
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3127,
                      "mutability": "mutable",
                      "name": "digest",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3178,
                      "src": "11361:14:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3126,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11361:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3136,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "1901",
                            "id": 3131,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11413:10:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                              "typeString": "literal_string \"\u0019\u0001\""
                            },
                            "value": "\u0019\u0001"
                          },
                          {
                            "argumentTypes": null,
                            "id": 3132,
                            "name": "domainSeparator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3094,
                            "src": "11425:15:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3133,
                            "name": "structHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3115,
                            "src": "11442:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                              "typeString": "literal_string \"\u0019\u0001\""
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3129,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "11396:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 3130,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "11396:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 3134,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11396:57:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 3128,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "11381:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3135,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11381:77:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11361:97:4"
                },
                {
                  "assignments": [
                    3138
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3138,
                      "mutability": "mutable",
                      "name": "signatory",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3178,
                      "src": "11462:17:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3137,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "11462:7:4",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3145,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3140,
                        "name": "digest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3127,
                        "src": "11492:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3141,
                        "name": "_v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3086,
                        "src": "11500:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3142,
                        "name": "_r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3088,
                        "src": "11504:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3143,
                        "name": "_s",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3090,
                        "src": "11508:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 3139,
                      "name": "ecrecover",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -6,
                      "src": "11482:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                      }
                    },
                    "id": 3144,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11482:29:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11462:49:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3152,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3147,
                          "name": "signatory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3138,
                          "src": "11527:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 3150,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11548:1:4",
                              "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": 3149,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "11540:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 3148,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "11540:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 3151,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11540:10:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "11527:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4752657075746174696f6e3a3a64656c656761746542795369673a20696e76616c6964207369676e6174757265",
                        "id": 3153,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11555:47:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b684cef1704a827e0a2175bd42616f8e28c29cf38b3a7cedae52995de42cd638",
                          "typeString": "literal_string \"GReputation::delegateBySig: invalid signature\""
                        },
                        "value": "GReputation::delegateBySig: invalid signature"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b684cef1704a827e0a2175bd42616f8e28c29cf38b3a7cedae52995de42cd638",
                          "typeString": "literal_string \"GReputation::delegateBySig: invalid signature\""
                        }
                      ],
                      "id": 3146,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11515:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3154,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11515:91:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3155,
                  "nodeType": "ExpressionStatement",
                  "src": "11515:91:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3162,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3157,
                          "name": "_nonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3082,
                          "src": "11622:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3161,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "11632:19:4",
                          "subExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 3158,
                              "name": "nonces",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2346,
                              "src": "11632:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 3160,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 3159,
                              "name": "signatory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3138,
                              "src": "11639:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "11632:17:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "11622:29:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4752657075746174696f6e3a3a64656c656761746542795369673a20696e76616c6964206e6f6e6365",
                        "id": 3163,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11656:43:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1b3d7e1fcc9690eb57c921265da44562c1a0250f1d973b525aed3d4c478ee77b",
                          "typeString": "literal_string \"GReputation::delegateBySig: invalid nonce\""
                        },
                        "value": "GReputation::delegateBySig: invalid nonce"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1b3d7e1fcc9690eb57c921265da44562c1a0250f1d973b525aed3d4c478ee77b",
                          "typeString": "literal_string \"GReputation::delegateBySig: invalid nonce\""
                        }
                      ],
                      "id": 3156,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11610:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3164,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11610:93:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3165,
                  "nodeType": "ExpressionStatement",
                  "src": "11610:93:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3169,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3167,
                          "name": "now",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -17,
                          "src": "11719:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3168,
                          "name": "_expiry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3084,
                          "src": "11726:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "11719:14:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4752657075746174696f6e3a3a64656c656761746542795369673a207369676e61747572652065787069726564",
                        "id": 3170,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11738:47:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3d946c5bd0d5bf9b3fa8244bc5af37ffc1770f288dd1046b96c4bbb0afd4abeb",
                          "typeString": "literal_string \"GReputation::delegateBySig: signature expired\""
                        },
                        "value": "GReputation::delegateBySig: signature expired"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3d946c5bd0d5bf9b3fa8244bc5af37ffc1770f288dd1046b96c4bbb0afd4abeb",
                          "typeString": "literal_string \"GReputation::delegateBySig: signature expired\""
                        }
                      ],
                      "id": 3166,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11707:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3171,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11707:82:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3172,
                  "nodeType": "ExpressionStatement",
                  "src": "11707:82:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3174,
                        "name": "signatory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3138,
                        "src": "11812:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3175,
                        "name": "_delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3080,
                        "src": "11823:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3173,
                      "name": "_delegateTo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3269,
                      "src": "11800:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 3176,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11800:33:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "functionReturnParameters": 3092,
                  "id": 3177,
                  "nodeType": "Return",
                  "src": "11793:40:4"
                }
              ]
            },
            "documentation": {
              "id": 3078,
              "nodeType": "StructuredDocumentation",
              "src": "10566:392:4",
              "text": " @notice Delegates votes from signatory to `delegate`\n @param _delegate The address to delegate votes to\n @param _nonce The contract state required to match the signature\n @param _expiry The time at which to expire the signature\n @param _v The recovery byte of the signature\n @param _r Half of the ECDSA signature pair\n @param _s Half of the ECDSA signature pair"
            },
            "functionSelector": "c3cda520",
            "id": 3179,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "delegateBySig",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3091,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3080,
                  "mutability": "mutable",
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3179,
                  "src": "10986:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3079,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10986:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3082,
                  "mutability": "mutable",
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3179,
                  "src": "11007:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3081,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11007:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3084,
                  "mutability": "mutable",
                  "name": "_expiry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3179,
                  "src": "11025:15:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3083,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11025:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3086,
                  "mutability": "mutable",
                  "name": "_v",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3179,
                  "src": "11044:8:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 3085,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "11044:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3088,
                  "mutability": "mutable",
                  "name": "_r",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3179,
                  "src": "11056:10:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3087,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11056:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3090,
                  "mutability": "mutable",
                  "name": "_s",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3179,
                  "src": "11070:10:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3089,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11070:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10982:101:4"
            },
            "returnParameters": {
              "id": 3092,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11091:0:4"
            },
            "scope": 3347,
            "src": "10960:877:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3268,
              "nodeType": "Block",
              "src": "12064:821:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3193,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3188,
                          "name": "_delegate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3184,
                          "src": "12080:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 3191,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12101:1:4",
                              "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": 3190,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "12093:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 3189,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "12093:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 3192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12093:10:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "12080:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4752657075746174696f6e3a3a64656c65676174652063616e27742064656c6567617420746f206e756c6c2061646472657373",
                        "id": 3194,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12108:53:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6e185b2e2b33eec3731da6cc5e2b932be32f566f6490651a989258735365d636",
                          "typeString": "literal_string \"GReputation::delegate can't delegat to null address\""
                        },
                        "value": "GReputation::delegate can't delegat to null address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6e185b2e2b33eec3731da6cc5e2b932be32f566f6490651a989258735365d636",
                          "typeString": "literal_string \"GReputation::delegate can't delegat to null address\""
                        }
                      ],
                      "id": 3187,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12068:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3195,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12068:97:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3196,
                  "nodeType": "ExpressionStatement",
                  "src": "12068:97:4"
                },
                {
                  "assignments": [
                    3198
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3198,
                      "mutability": "mutable",
                      "name": "curDelegator",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3268,
                      "src": "12170:20:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3197,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "12170:7:4",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3202,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 3199,
                      "name": "delegates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2368,
                      "src": "12193:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                        "typeString": "mapping(address => address)"
                      }
                    },
                    "id": 3201,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 3200,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3182,
                      "src": "12203:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "12193:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12170:39:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3206,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3204,
                          "name": "curDelegator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3198,
                          "src": "12221:12:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3205,
                          "name": "_delegate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3184,
                          "src": "12237:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "12221:25:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "616c72656164792064656c65676174696e6720746f2064656c656761746f72",
                        "id": 3207,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12248:33:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9294b2ce96ffc8d4f08fe3a1dd2e8b30a4b6fa03eeb64bc3b9ee07bb0b0ac554",
                          "typeString": "literal_string \"already delegating to delegator\""
                        },
                        "value": "already delegating to delegator"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9294b2ce96ffc8d4f08fe3a1dd2e8b30a4b6fa03eeb64bc3b9ee07bb0b0ac554",
                          "typeString": "literal_string \"already delegating to delegator\""
                        }
                      ],
                      "id": 3203,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12213:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3208,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12213:69:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3209,
                  "nodeType": "ExpressionStatement",
                  "src": "12213:69:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 3210,
                        "name": "delegates",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2368,
                        "src": "12287:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 3212,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 3211,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3182,
                        "src": "12297:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "12287:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3213,
                      "name": "_delegate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3184,
                      "src": "12306:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "12287:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3215,
                  "nodeType": "ExpressionStatement",
                  "src": "12287:28:4"
                },
                {
                  "assignments": [
                    3217
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3217,
                      "mutability": "mutable",
                      "name": "coreBalance",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3268,
                      "src": "12361:19:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3216,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12361:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3221,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3219,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3182,
                        "src": "12393:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3218,
                      "name": "balanceOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3585,
                      "src": "12383:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 3220,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12383:16:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12361:38:4"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3227,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3222,
                      "name": "curDelegator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3198,
                      "src": "12483:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12507:1:4",
                          "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": 3224,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "12499:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 3223,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12499:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 3226,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12499:10:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "12483:26:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3248,
                  "nodeType": "IfStatement",
                  "src": "12479:210:4",
                  "trueBody": {
                    "id": 3247,
                    "nodeType": "Block",
                    "src": "12511:178:4",
                    "statements": [
                      {
                        "assignments": [
                          3229
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3229,
                            "mutability": "mutable",
                            "name": "curVotes",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3247,
                            "src": "12516:16:4",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3228,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "12516:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3236,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3231,
                              "name": "curDelegator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3198,
                              "src": "12546:12:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "66616c7365",
                              "id": 3232,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12560:5:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "false"
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3233,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "12567:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 3234,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "number",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "12567:12:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3230,
                            "name": "getVotesAt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              2683,
                              2716
                            ],
                            "referencedDeclaration": 2683,
                            "src": "12535:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (address,bool,uint256) view returns (uint256)"
                            }
                          },
                          "id": 3235,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12535:45:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12516:64:4"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3238,
                              "name": "curDelegator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3198,
                              "src": "12611:12:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3239,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3182,
                              "src": "12629:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3240,
                              "name": "curVotes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3229,
                              "src": "12640:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3243,
                                  "name": "coreBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3217,
                                  "src": "12667:11:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3241,
                                  "name": "curVotes",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3229,
                                  "src": "12654:8:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 3242,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 7990,
                                "src": "12654:12:4",
                                "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": 3244,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12654:25:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3237,
                            "name": "_updateDelegateVotes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3296,
                            "src": "12585:20:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 3245,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12585:99:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3246,
                        "nodeType": "ExpressionStatement",
                        "src": "12585:99:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3250
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3250,
                      "mutability": "mutable",
                      "name": "curVotes",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3268,
                      "src": "12725:16:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3249,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12725:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3257,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3252,
                        "name": "_delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3184,
                        "src": "12755:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 3253,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12766:5:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3254,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "12773:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 3255,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "number",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "12773:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3251,
                      "name": "getVotesAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2683,
                        2716
                      ],
                      "referencedDeclaration": 2683,
                      "src": "12744:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,bool,uint256) view returns (uint256)"
                      }
                    },
                    "id": 3256,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12744:42:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12725:61:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3259,
                        "name": "_delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3184,
                        "src": "12815:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3260,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3182,
                        "src": "12829:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3261,
                        "name": "curVotes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3250,
                        "src": "12839:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3264,
                            "name": "coreBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3217,
                            "src": "12865:11:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3262,
                            "name": "curVotes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3250,
                            "src": "12852:8:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3263,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7973,
                          "src": "12852:12:4",
                          "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": 3265,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12852:25:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3258,
                      "name": "_updateDelegateVotes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3296,
                      "src": "12790:20:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256)"
                      }
                    },
                    "id": 3266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12790:91:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3267,
                  "nodeType": "ExpressionStatement",
                  "src": "12790:91:4"
                }
              ]
            },
            "documentation": {
              "id": 3180,
              "nodeType": "StructuredDocumentation",
              "src": "11840:158:4",
              "text": "@notice internal function to delegate votes to another user\n @param _user the source of votes (delegator)\n @param _delegate the recipient of votes"
            },
            "id": 3269,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_delegateTo",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3185,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3182,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3269,
                  "src": "12021:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3181,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12021:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3184,
                  "mutability": "mutable",
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3269,
                  "src": "12036:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3183,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12036:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12020:34:4"
            },
            "returnParameters": {
              "id": 3186,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12064:0:4"
            },
            "scope": 3347,
            "src": "12000:885:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3295,
              "nodeType": "Block",
              "src": "13307:133:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 3282,
                          "name": "activeVotes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2374,
                          "src": "13328:11:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_uint256_$dyn_storage_$",
                            "typeString": "mapping(address => uint256[] storage ref)"
                          }
                        },
                        "id": 3284,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 3283,
                          "name": "_delegate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3272,
                          "src": "13340:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "13328:22:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                          "typeString": "uint256[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3285,
                        "name": "_newVotes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3278,
                        "src": "13352:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                          "typeString": "uint256[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3281,
                      "name": "updateValueAtNow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3858,
                      "src": "13311:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256[] storage pointer,uint256)"
                      }
                    },
                    "id": 3286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13311:51:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3287,
                  "nodeType": "ExpressionStatement",
                  "src": "13311:51:4"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3289,
                        "name": "_delegate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3272,
                        "src": "13392:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3290,
                        "name": "_delegator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3274,
                        "src": "13403:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3291,
                        "name": "_oldVotes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3276,
                        "src": "13415:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3292,
                        "name": "_newVotes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3278,
                        "src": "13426:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3288,
                      "name": "DelegateVotesChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2385,
                      "src": "13371:20:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256)"
                      }
                    },
                    "id": 3293,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13371:65:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3294,
                  "nodeType": "EmitStatement",
                  "src": "13366:70:4"
                }
              ]
            },
            "documentation": {
              "id": 3270,
              "nodeType": "StructuredDocumentation",
              "src": "12888:290:4",
              "text": "@notice internal function to update delegated votes, emits event with changes\n @param _delegate the delegate whose record we are updating\n @param _delegator the delegator\n @param _oldVotes the delegate previous votes\n @param _newVotes the delegate votes after the change"
            },
            "id": 3296,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_updateDelegateVotes",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3279,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3272,
                  "mutability": "mutable",
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3296,
                  "src": "13213:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3271,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13213:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3274,
                  "mutability": "mutable",
                  "name": "_delegator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3296,
                  "src": "13234:18:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3273,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13234:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3276,
                  "mutability": "mutable",
                  "name": "_oldVotes",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3296,
                  "src": "13256:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3275,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13256:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3278,
                  "mutability": "mutable",
                  "name": "_newVotes",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3296,
                  "src": "13277:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3277,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13277:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13209:88:4"
            },
            "returnParameters": {
              "id": 3280,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13307:0:4"
            },
            "scope": 3347,
            "src": "13180:260:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3332,
              "nodeType": "Block",
              "src": "13807:130:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3313,
                      "name": "leafHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3309,
                      "src": "13811:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3317,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3299,
                              "src": "13843:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3318,
                              "name": "_balance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3301,
                              "src": "13850:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3315,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "13832:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 3316,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encode",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "13832:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 3319,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13832:27:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 3314,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "13822:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 3320,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13822:38:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "13811:49:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 3322,
                  "nodeType": "ExpressionStatement",
                  "src": "13811:49:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3330,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3323,
                      "name": "isProofValid",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3311,
                      "src": "13864:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3326,
                          "name": "_proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3306,
                          "src": "13909:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3327,
                          "name": "_root",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3303,
                          "src": "13917:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3328,
                          "name": "leafHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3309,
                          "src": "13924:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 3324,
                          "name": "MerkleProofUpgradeable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7944,
                          "src": "13879:22:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_MerkleProofUpgradeable_$7944_$",
                            "typeString": "type(library MerkleProofUpgradeable)"
                          }
                        },
                        "id": 3325,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "verify",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7943,
                        "src": "13879:29:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                          "typeString": "function (bytes32[] memory,bytes32,bytes32) pure returns (bool)"
                        }
                      },
                      "id": 3329,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13879:54:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "13864:69:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3331,
                  "nodeType": "ExpressionStatement",
                  "src": "13864:69:4"
                }
              ]
            },
            "documentation": {
              "id": 3297,
              "nodeType": "StructuredDocumentation",
              "src": "13443:191:4",
              "text": "@notice helper function to check merkle proof using openzeppelin\n @return leafHash isProofValid tuple (byte32, bool) with the hash of the leaf data we prove and true if proof is valid"
            },
            "id": 3333,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkMerkleProof",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3307,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3299,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3333,
                  "src": "13666:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3298,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13666:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3301,
                  "mutability": "mutable",
                  "name": "_balance",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3333,
                  "src": "13683:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3300,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13683:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3303,
                  "mutability": "mutable",
                  "name": "_root",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3333,
                  "src": "13703:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3302,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13703:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3306,
                  "mutability": "mutable",
                  "name": "_proof",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3333,
                  "src": "13720:23:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 3304,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "13720:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 3305,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "13720:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13662:84:4"
            },
            "returnParameters": {
              "id": 3312,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3309,
                  "mutability": "mutable",
                  "name": "leafHash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3333,
                  "src": "13770:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3308,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13770:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3311,
                  "mutability": "mutable",
                  "name": "isProofValid",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3333,
                  "src": "13788:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3310,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "13788:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13769:37:4"
            },
            "scope": 3347,
            "src": "13636:301:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3345,
              "nodeType": "Block",
              "src": "14069:82:4",
              "statements": [
                {
                  "assignments": [
                    3340
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3340,
                      "mutability": "mutable",
                      "name": "chainId",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 3345,
                      "src": "14073:15:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3339,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14073:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3341,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14073:15:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "14101:29:4",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "14106:20:4",
                        "value": {
                          "arguments": [],
                          "functionName": {
                            "name": "chainid",
                            "nodeType": "YulIdentifier",
                            "src": "14117:7:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "14117:9:4"
                        },
                        "variableNames": [
                          {
                            "name": "chainId",
                            "nodeType": "YulIdentifier",
                            "src": "14106:7:4"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 3340,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14106:7:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 3342,
                  "nodeType": "InlineAssembly",
                  "src": "14092:38:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3343,
                    "name": "chainId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3340,
                    "src": "14140:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3338,
                  "id": 3344,
                  "nodeType": "Return",
                  "src": "14133:14:4"
                }
              ]
            },
            "documentation": {
              "id": 3334,
              "nodeType": "StructuredDocumentation",
              "src": "13940:73:4",
              "text": "@notice helper function to get current chain id\n @return chain id"
            },
            "id": 3346,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getChainId",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 3335,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14034:2:4"
            },
            "returnParameters": {
              "id": 3338,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3337,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 3346,
                  "src": "14060:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3336,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14060:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14059:9:4"
            },
            "scope": 3347,
            "src": "14015:136:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 3348,
        "src": "376:13777:4"
      }
    ],
    "src": "32:14122:4"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.12+commit.27d51765.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.0",
  "updatedAt": "2021-01-17T13:45:27.045Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "balanceOf(address)": {
        "details": "return the reputation amount of a given owner",
        "params": {
          "_owner": "an address of the owner which we want to get his reputation"
        }
      },
      "balanceOfAt(address,uint256)": {
        "details": "Queries the balance of `_owner` at a specific `_blockNumber`",
        "params": {
          "_blockNumber": "The block number when the balance is queried",
          "_owner": "The address from which the balance will be retrieved"
        },
        "returns": {
          "_0": "The balance at `_blockNumber`"
        }
      },
      "burn(address,uint256)": {
        "params": {
          "_amount": "The quantity of reputation to burn",
          "_user": "The address that will lose the reputation"
        },
        "returns": {
          "_0": "True if the reputation are burned correctly"
        }
      },
      "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": {
        "params": {
          "_delegate": "The address to delegate votes to",
          "_expiry": "The time at which to expire the signature",
          "_nonce": "The contract state required to match the signature",
          "_r": "Half of the ECDSA signature pair",
          "_s": "Half of the ECDSA signature pair",
          "_v": "The recovery byte of the signature"
        }
      },
      "delegateOf(address)": {
        "params": {
          "_user": "the delegatee"
        },
        "returns": {
          "_0": "the address of the delegate (can be _user  if no delegate or 0x0 if _user doesnt exists)"
        }
      },
      "delegateTo(address)": {
        "params": {
          "_delegate": "the recipient of votes"
        }
      },
      "getVotes(address)": {
        "params": {
          "_user": "the user to get active votes for"
        },
        "returns": {
          "_0": "the number of votes"
        }
      },
      "getVotesAt(address,bool,uint256)": {
        "params": {
          "_blockNumber": "get votes state at specific block",
          "_global": "wether to include reputation from other blockchains",
          "_user": "the user to get active votes for"
        },
        "returns": {
          "_0": "the number of votes"
        }
      },
      "getVotesAt(address,uint256)": {
        "params": {
          "_blockNumber": "get votes state at specific block",
          "_user": "user to get active votes for"
        },
        "returns": {
          "_0": "the number of votes"
        }
      },
      "getVotesAtBlockchain(bytes32,address,uint256)": {
        "params": {
          "_blockNumber": "get votes state at specific block",
          "_id": "the keccak hash of the blockchain string id",
          "_user": "the user to get active votes for"
        },
        "returns": {
          "_0": "the number of votes"
        }
      },
      "initialize(address)": {
        "details": "initialize"
      },
      "mint(address,uint256)": {
        "params": {
          "_amount": "The quantity of reputation generated",
          "_user": "The address that will be assigned the new reputation"
        },
        "returns": {
          "_0": "True if the reputation are generated correctly"
        }
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "proveBalanceOfAtBlockchain(string,address,uint256,bytes32[])": {
        "details": "\"rootState\" is a special state that can be supplied once, and actually mints reputation on the current blockchain",
        "params": {
          "_balance": "the balance we are prooving",
          "_id": "the string id of the blockchain we supply proof for",
          "_proof": "array of byte32 with proof data (currently merkle tree path)",
          "_user": "the user to prove his balance"
        },
        "returns": {
          "_0": "true if proof is valid"
        }
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "setBlockchainStateHash(string,bytes32,uint256)": {
        "params": {
          "_hash": "the state hash",
          "_id": "the string name of the blockchain (will be hashed to produce byte32 id)",
          "_totalSupply": "total supply of reputation on the specific blockchain"
        }
      },
      "totalSupply()": {
        "details": "This function makes it easy to get the total number of reputation",
        "returns": {
          "_0": "The total number of reputation"
        }
      },
      "totalSupplyAt(uint256)": {
        "params": {
          "_blockNumber": "get total supply at specific block"
        },
        "returns": {
          "_0": "the totaly supply"
        }
      },
      "totalSupplyAtBlockchain(bytes32,uint256)": {
        "params": {
          "_blockNumber": "get total supply at specific block"
        },
        "returns": {
          "_0": "the totaly supply"
        }
      },
      "totalSupplyLocal(uint256)": {
        "params": {
          "_blockNumber": "get total supply at specific block"
        },
        "returns": {
          "_0": "the totaly supply"
        }
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      },
      "undelegate()": {
        "details": "makes user his own delegate"
      }
    },
    "title": "GReputation extends Reputation with delegation and cross blockchain merkle states",
    "version": 1
  },
  "userdoc": {
    "events": {
      "DelegateVotesChanged(address,address,uint256,uint256)": {
        "notice": "An event thats emitted when a delegate account's vote balance changes"
      }
    },
    "kind": "user",
    "methods": {
      "DELEGATION_TYPEHASH()": {
        "notice": "The EIP-712 typehash for the delegation struct used by the contract"
      },
      "DOMAIN_TYPEHASH()": {
        "notice": "The EIP-712 typehash for the contract's domain"
      },
      "activeBlockchains(uint256)": {
        "notice": "list of blockchains having a statehash for easy iteration"
      },
      "activeVotes(address,uint256)": {
        "notice": "map of user non delegatd + delegated votes to user. this is used for actual voting"
      },
      "blockchainStates(bytes32,uint256)": {
        "notice": "mapping from blockchain id hash to list of states"
      },
      "burn(address,uint256)": {
        "notice": "Burns `_amount` reputation from `_owner`"
      },
      "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": {
        "notice": "Delegates votes from signatory to `delegate`"
      },
      "delegateOf(address)": {
        "notice": "returns current delegate of _user"
      },
      "delegateTo(address)": {
        "notice": "delegate votes to another user"
      },
      "delegates(address)": {
        "notice": "keep map of user -> delegate"
      },
      "getVotes(address)": {
        "notice": "returns aggregated active votes in all blockchains and delegated"
      },
      "getVotesAt(address,bool,uint256)": {
        "notice": "get the number of active votes a user holds after delegation (vs the basic balance of reputation he holds)"
      },
      "getVotesAt(address,uint256)": {
        "notice": "returns aggregated active votes in all blockchains and delegated at specific block"
      },
      "getVotesAtBlockchain(bytes32,address,uint256)": {
        "notice": "get the number of active votes a user holds after delegation in specific blockchain"
      },
      "mint(address,uint256)": {
        "notice": "Generates `_amount` reputation that are assigned to `_owner`"
      },
      "nonces(address)": {
        "notice": "A record of states for signing / validating signatures"
      },
      "proveBalanceOfAtBlockchain(string,address,uint256,bytes32[])": {
        "notice": "prove user balance in a specific blockchain state hash"
      },
      "setBlockchainStateHash(string,bytes32,uint256)": {
        "notice": "sets the state hash of a blockchain, can only be called by owner"
      },
      "stateHashBalances(bytes32,address)": {
        "notice": "mapping from stateHash to the user balance can be >0 only after supplying state proof"
      },
      "totalSupplyAt(uint256)": {
        "notice": "returns total supply in all blockchain aggregated"
      },
      "totalSupplyAtBlockchain(bytes32,uint256)": {
        "notice": "returns total supply in a specific blockchain"
      },
      "totalSupplyLocal(uint256)": {
        "notice": "returns total supply in current blockchain (super.balanceOfAt)"
      },
      "undelegate()": {
        "notice": "cancel user delegation"
      }
    },
    "version": 1
  }
}