{
  "contractName": "ERC20Custom",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_symbol",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "_capSupply",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "fromDelegate",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "toDelegate",
          "type": "address"
        }
      ],
      "name": "DelegateChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegate",
          "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": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "MINTER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "PAUSER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "burnFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "pos",
          "type": "uint32"
        }
      ],
      "name": "checkpoints",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "fromBlock",
              "type": "uint32"
            },
            {
              "internalType": "uint224",
              "name": "votes",
              "type": "uint224"
            }
          ],
          "internalType": "struct ERC20Votes.Checkpoint",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        }
      ],
      "name": "delegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegatee",
          "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": "account",
          "type": "address"
        }
      ],
      "name": "delegates",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getPastTotalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getPastVotes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getVotes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "numCheckpoints",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_newCap",
          "type": "uint256"
        }
      ],
      "name": "setCap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_increaseCap",
          "type": "uint256"
        }
      ],
      "name": "increaseCap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_decreaseCap",
          "type": "uint256"
        }
      ],
      "name": "decreaseCap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_capSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromDelegate\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toDelegate\",\"type\":\"address\"}],\"name\":\"DelegateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegate\",\"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\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINTER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"pos\",\"type\":\"uint32\"}],\"name\":\"checkpoints\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"fromBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint224\",\"name\":\"votes\",\"type\":\"uint224\"}],\"internalType\":\"struct ERC20Votes.Checkpoint\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_decreaseCap\",\"type\":\"uint256\"}],\"name\":\"decreaseCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"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\":\"account\",\"type\":\"address\"}],\"name\":\"delegates\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"getPastTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"getPastVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_increaseCap\",\"type\":\"uint256\"}],\"name\":\"increaseCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"numCheckpoints\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newCap\",\"type\":\"uint256\"}],\"name\":\"setCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"burn(uint256)\":{\"details\":\"Destroys `amount` tokens from the caller. See {ERC20-_burn}.\"},\"burnFrom(address,uint256)\":{\"details\":\"Destroys `amount` tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `amount`.\"},\"cap()\":{\"details\":\"Returns the cap on the token's total supply.\"},\"checkpoints(address,uint32)\":{\"details\":\"Get the `pos`-th checkpoint for `account`.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"decreaseCap(uint256)\":{\"details\":\"Decrease the cap supply\"},\"delegate(address)\":{\"details\":\"Delegate votes from the sender to `delegatee`.\"},\"delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Delegates votes from signer to `delegatee`\"},\"delegates(address)\":{\"details\":\"Get the address `account` is currently delegating to.\"},\"getPastTotalSupply(uint256)\":{\"details\":\"Retrieve the `totalSupply` at the end of `blockNumber`. Note, this value is the sum of all balances. It is but NOT the sum of all the delegated votes! Requirements: - `blockNumber` must have been already mined\"},\"getPastVotes(address,uint256)\":{\"details\":\"Retrieve the number of votes for `account` at the end of `blockNumber`. Requirements: - `blockNumber` must have been already mined\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getVotes(address)\":{\"details\":\"Gets the current votes balance for `account`\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"increaseCap(uint256)\":{\"details\":\"Increase the cap supply\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"numCheckpoints(address)\":{\"details\":\"Get number of checkpoints for `account`.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role.\"},\"setCap(uint256)\":{\"details\":\"Set new cap supply\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/token/ERC20Custom.sol\":\"ERC20Custom\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0x4a1a0ba12bf1a33f10d9fe226278cf59675c0b929d29e4da99658a079b27fb84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bda1319db846d6d6f92d8a57a9bdee8bde1dc39aa7546165791692c24dd6f30a\",\"dweb:/ipfs/Qma5oZ7DmbdAjd8mpiW7mx896PDtwsQtCQ2hj9Upf7b7JK\"]},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bb2c137c343ef0c4c7ce7b18c1d108afdc9d315a04e48307288d2d05adcbde3a\",\"dweb:/ipfs/QmUxhrAQM3MM3FF5j7AtcXLXguWCJBHJ14BRdVtuoQc8Fh\"]},\"@openzeppelin/contracts/governance/utils/IVotes.sol\":{\"keccak256\":\"0xf5324a55ee9c0b4a840ea57c055ac9d046f88986ceef567e1cf68113e46a79c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f41fe2bddc33c17ccccfc25379b1869354e9ee62d8b28d2acc95229eeba37a86\",\"dweb:/ipfs/Qmb6SF2XL2uSvH6k5JSjtx4Xoqz41ACkhdAhtbW1Yh3RiY\"]},\"@openzeppelin/contracts/security/Pausable.sol\":{\"keccak256\":\"0xe68ed7fb8766ed1e888291f881e36b616037f852b37d96877045319ad298ba87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1d491a2ca79dbf44bc02e876e21a5847a2cbcc011188532ad8662cdc1c134a4e\",\"dweb:/ipfs/QmUQXhSV8ZvHLzfdG89ZNSh1nLrAYyjnNBLznJGwGcwVk8\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xdadd41acb749920eccf40aeaa8d291adf9751399a7343561bad13e7a8d99be0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://12af4ac016f9fdf3be5d15824f4292272aa11f6b2e0192a0f7320f5ad49bbbf0\",\"dweb:/ipfs/QmRXMpdqCgA3TYuYxBodqs5p9jGbnMW6xa2gvjppvq4TWk\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbbc8ac883ac3c0078ce5ad3e288fbb3ffcc8a30c3a98c0fda0114d64fc44fca2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87a7a5d2f6f63f84598af02b8c50ca2df2631cb8ba2453e8d95fcb17e4be9824\",\"dweb:/ipfs/QmR76hqtAcRqoFj33tmNjcWTLrgNsAaakYwnKZ8zoJtKei\"]},\"@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol\":{\"keccak256\":\"0x0d19410453cda55960a818e02bd7c18952a5c8fe7a3036e81f0d599f34487a7b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c0f62d3d5bef22b5ca00cc3903e7de6152cb68d2d22401a463f373cda54c00f\",\"dweb:/ipfs/QmSfzjZux7LC7NW2f7rjCXTHeFMUCWERqDkhpCTBy7kxTe\"]},\"@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol\":{\"keccak256\":\"0x7fd2492be0468be4662081ee25cde38a31e4a0ceca0fed10160462389013910f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://10c660ba772feee0fcb29319b15b328b429cd020079786e8d00992159f4b7b4e\",\"dweb:/ipfs/QmTjnb1FLbjHkgSZ7qcRZnNSwmZnobBpkJ9UWSc1SkVqhU\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol\":{\"keccak256\":\"0x8a763ef5625e97f5287c7ddd5ede434129069e15d83bf0a68ad10a5e56ccb439\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a3f75a7be83ce0fb636d3835e43348243d4ced9df08fb9ab6cf879ccf4d81b7\",\"dweb:/ipfs/QmauKgQQthadf1DLEbfkDWwNGcJ1doRH21EXSuacSDWGWt\"]},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/Counters.sol\":{\"keccak256\":\"0xf0018c2440fbe238dd3a8732fa8e17a0f9dce84d31451dc8a32f6d62b349c9f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://59e1c62884d55b70f3ae5432b44bb3166ad71ae3acd19c57ab6ddc3c87c325ee\",\"dweb:/ipfs/QmezuXg5GK5oeA4F91EZhozBFekhq5TD966bHPH18cCqhu\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x32c202bd28995dd20c4347b7c6467a6d3241c74c8ad3edcbb610cd9205916c45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8179c356adb19e70d6b31a1eedc8c5c7f0c00e669e2540f4099e3844c6074d30\",\"dweb:/ipfs/QmWFbivarEobbqhS1go64ootVuHfVohBseerYy9FTEd1W2\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x3c07f43e60e099b3b157243b3152722e73b80eeb7985c2cd73712828d7f7da29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://466ffb5a6e3bd65fffd996f9287ffd240ea21588a338c6efe143d94eaed014a7\",\"dweb:/ipfs/Qmans3vvPJZcvxe9KLAPc9Xwe4TFVTJdzaQGpi62Vrhoe2\"]},\"@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol\":{\"keccak256\":\"0x6688fad58b9ec0286d40fa957152e575d5d8bd4c3aa80985efdb11b44f776ae7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8bc00ab7f133cdaafd212a5cc6a16c8d37319721105d130c8e5af0c4e8f170ba\",\"dweb:/ipfs/QmVmf6LVMfFiEkvKYLzSv3bGHzymEW93AcUuFrNUdY3NtT\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xc995bddbca1ae19788db9f8b61e63385edd3fddf89693b612d5abd1a275974d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab84f13e6e6e0823854a0cddd49e96df052092d5919f95587607f0ed28a64cb6\",\"dweb:/ipfs/QmbNtqAq23ZDjCzHukQaa7B3y6rcobscm6FZF5PMQXcnVr\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x5c6caab697d302ad7eb59c234a4d2dbc965c1bae87709bd2850060b7695b28c7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb62abcee612c175f1b9bc70e5dfe5bd23473c99987ade6e80e291f68dc60ff1\",\"dweb:/ipfs/QmZCMajhG7FtRYNDwBchXN89mXR6HLPVzr9732qfUdNf9E\"]},\"@openzeppelin/contracts/utils/math/SafeMath.sol\":{\"keccak256\":\"0xa2f576be637946f767aa56601c26d717f48a0aff44f82e46f13807eea1009a21\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://973868f808e88e21a1a0a01d4839314515ee337ad096286c88e41b74dcc11fc2\",\"dweb:/ipfs/QmfYuZxRfx2J2xdk4EXN7jKg4bUYEMTaYk9BAw9Bqn4o2Y\"]},\"project:/contracts/token/ERC20Custom.sol\":{\"keccak256\":\"0x6b4b2606f2aadfa0d3bc338cfdc5221ef0065d07d2f0fcca1e8077feaf0a132c\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://da52972be629fa019f095e20fd2ae1d6832ebdfac06cb94ef2961f3b3267828c\",\"dweb:/ipfs/QmdCWNkp1t9WyMfb2cG2m2Q2cijkW3tqWAgzTXbju9JpXJ\"]}},\"version\":1}",
  "bytecode": "0x6101606040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610140523480156200003757600080fd5b5060405162002ed938038062002ed98339810160408190526200005a9162000420565b8280604051806040016040528060018152602001603160f81b8152508585816003908051906020019062000090929190620002ad565b508051620000a6906004906020840190620002ad565b50506005805460ff1916905550815160209283012081519183019190912060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818801819052818301969096526060810194909452608080850193909352308483018190528151808603909301835260c094850190915281519190950120905291909152610120525080620001955760405162461bcd60e51b815260206004820152601560248201527f45524332304361707065643a2063617020697320300000000000000000000000604482015260640160405180910390fd5b600b819055620001a760003362000208565b620001d37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a3362000208565b620001ff7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63362000208565b505050620004d0565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff16620002a95760008281526006602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620002683390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b828054620002bb9062000493565b90600052602060002090601f016020900481019282620002df57600085556200032a565b82601f10620002fa57805160ff19168380011785556200032a565b828001600101855582156200032a579182015b828111156200032a5782518255916020019190600101906200030d565b50620003389291506200033c565b5090565b5b808211156200033857600081556001016200033d565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200037b57600080fd5b81516001600160401b038082111562000398576200039862000353565b604051601f8301601f19908116603f01168101908282118183101715620003c357620003c362000353565b81604052838152602092508683858801011115620003e057600080fd5b600091505b83821015620004045785820183015181830184015290820190620003e5565b83821115620004165760008385830101525b9695505050505050565b6000806000606084860312156200043657600080fd5b83516001600160401b03808211156200044e57600080fd5b6200045c8783880162000369565b945060208601519150808211156200047357600080fd5b50620004828682870162000369565b925050604084015190509250925092565b600181811c90821680620004a857607f821691505b60208210811415620004ca57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516129ae6200052b6000396000610ead01526000611570015260006115bf0152600061159a015260006114f30152600061151d0152600061154701526129ae6000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c80635c975abb116101465780639ab24eb0116100c3578063d505accf11610087578063d505accf14610527578063d53913931461053a578063d547741f14610561578063dd62ed3e14610574578063e63ab1e9146105ad578063f1127ed8146105d457600080fd5b80639ab24eb0146104d3578063a217fddf146104e6578063a457c2d7146104ee578063a9059cbb14610501578063c3cda5201461051457600080fd5b80637ecebe001161010a5780637ecebe001461048a5780638456cb591461049d5780638e539e8c146104a557806391d14854146104b857806395d89b41146104cb57600080fd5b80635c975abb146104085780636fcfff451461041357806370a082311461043b5780637430a6891461046457806379cc67901461047757600080fd5b806336568abe116101d457806342966c681161019857806342966c681461037857806347786d371461038b578063523e95511461039e578063587cde1e146103b15780635c19a95c146103f557600080fd5b806336568abe1461032457806339509351146103375780633a46b1a81461034a5780633f4ba83a1461035d57806340c10f191461036557600080fd5b8063248a9ca31161021b578063248a9ca3146102cd5780632f2ff15d146102f0578063313ce56714610305578063355274ea146103145780633644e5151461031c57600080fd5b806301ffc9a71461025857806306fdde0314610280578063095ea7b31461029557806318160ddd146102a857806323b872dd146102ba575b600080fd5b61026b610266366004612547565b610611565b60405190151581526020015b60405180910390f35b610288610648565b604051610277919061259d565b61026b6102a33660046125ec565b6106da565b6002545b604051908152602001610277565b61026b6102c8366004612616565b6106f2565b6102ac6102db366004612652565b60009081526006602052604090206001015490565b6103036102fe36600461266b565b610716565b005b60405160128152602001610277565b600b546102ac565b6102ac610741565b61030361033236600461266b565b610750565b61026b6103453660046125ec565b6107d3565b6102ac6103583660046125ec565b610812565b61030361088c565b6103036103733660046125ec565b6108c2565b610303610386366004612652565b6108f7565b610303610399366004612652565b610901565b6103036103ac366004612652565b610996565b6103dd6103bf366004612697565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b039091168152602001610277565b610303610403366004612697565b610a2a565b60055460ff1661026b565b610426610421366004612697565b610a34565b60405163ffffffff9091168152602001610277565b6102ac610449366004612697565b6001600160a01b031660009081526020819052604090205490565b610303610472366004612652565b610a56565b6103036104853660046125ec565b610b00565b6102ac610498366004612697565b610b15565b610303610b33565b6102ac6104b3366004612652565b610b66565b61026b6104c636600461266b565b610bc2565b610288610bed565b6102ac6104e1366004612697565b610bfc565b6102ac600081565b61026b6104fc3660046125ec565b610c83565b61026b61050f3660046125ec565b610d15565b6103036105223660046126c3565b610d23565b61030361053536600461271b565b610e59565b6102ac7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61030361056f36600461266b565b610fbd565b6102ac610582366004612785565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102ac7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6105e76105e23660046127af565b610fe3565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610277565b60006001600160e01b03198216637965db0b60e01b148061064257506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610657906127ef565b80601f0160208091040260200160405190810160405280929190818152602001828054610683906127ef565b80156106d05780601f106106a5576101008083540402835291602001916106d0565b820191906000526020600020905b8154815290600101906020018083116106b357829003601f168201915b5050505050905090565b6000336106e8818585611067565b5060019392505050565b60003361070085828561118b565b61070b85858561121d565b506001949350505050565b60008281526006602052604090206001015461073281336113fc565b61073c8383611460565b505050565b600061074b6114e6565b905090565b6001600160a01b03811633146107c55760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107cf828261160d565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091906106e8908290869061080d90879061283a565b611067565b60004382106108635760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064016107bc565b6001600160a01b03831660009081526009602052604090206108859083611674565b9392505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108b781336113fc565b6108bf611731565b50565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66108ed81336113fc565b61073c83836117c4565b6108bf3382611833565b600061090d81336113fc565b60025482116109905760405162461bcd60e51b815260206004820152604360248201527f4552433230437573746f6d3a204e6577206361702073657420746f206265206c60448201527f6f776572207468616e206f7220657175616c20746f20746f74616c20737570706064820152626c792160e81b608482015260a4016107bc565b50600b55565b60006109a281336113fc565b60008211610a115760405162461bcd60e51b815260206004820152603660248201527f4552433230437573746f6d3a20496e637265617365204361702076616c756520604482015275686173206e6f6e2d76616c696420302076616c75652160501b60648201526084016107bc565b610a23610a1d600b5490565b8361183d565b600b555050565b6108bf3382611849565b6001600160a01b038116600090815260096020526040812054610642906118c2565b6000610a6281336113fc565b600082118015610a855750610a81610a79600b5490565b60025461192b565b8211155b610aee5760405162461bcd60e51b815260206004820152603460248201527f4552433230437573746f6d3a204465637265617365204361702076616c756520604482015273686173206e6f6e2d76616c69642076616c75652160601b60648201526084016107bc565b610a23610afa600b5490565b8361192b565b610b0b82338361118b565b6107cf8282611833565b6001600160a01b038116600090815260076020526040812054610642565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b5e81336113fc565b6108bf611937565b6000438210610bb75760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064016107bc565b610642600a83611674565b60009182526006602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610657906127ef565b6001600160a01b0381166000908152600960205260408120548015610c70576001600160a01b0383166000908152600960205260409020610c3e600183612852565b81548110610c4e57610c4e612869565b60009182526020909120015464010000000090046001600160e01b0316610c73565b60005b6001600160e01b03169392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610d085760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107bc565b61070b8286868403611067565b6000336106e881858561121d565b83421115610d735760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e6174757265206578706972656400000060448201526064016107bc565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610ded90610de59060a001604051602081830303815290604052805190602001206119b2565b858585611a00565b9050610df881611a28565b8614610e465760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e63650000000000000060448201526064016107bc565b610e508188611849565b50505050505050565b83421115610ea95760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016107bc565b60007f0000000000000000000000000000000000000000000000000000000000000000888888610ed88c611a28565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610f33826119b2565b90506000610f4382878787611a00565b9050896001600160a01b0316816001600160a01b031614610fa65760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016107bc565b610fb18a8a8a611067565b50505050505050505050565b600082815260066020526040902060010154610fd981336113fc565b61073c838361160d565b60408051808201909152600080825260208201526001600160a01b0383166000908152600960205260409020805463ffffffff841690811061102757611027612869565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6001600160a01b0383166110c95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107bc565b6001600160a01b03821661112a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107bc565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611217578181101561120a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107bc565b6112178484848403611067565b50505050565b6001600160a01b0383166112815760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107bc565b6001600160a01b0382166112e35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107bc565b6112ee838383611a50565b6001600160a01b038316600090815260208190526040902054818110156113665760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107bc565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061139d90849061283a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113e991815260200190565b60405180910390a3611217848484611a96565b6114068282610bc2565b6107cf5761141e816001600160a01b03166014611aa1565b611429836020611aa1565b60405160200161143a92919061287f565b60408051601f198184030181529082905262461bcd60e51b82526107bc9160040161259d565b61146a8282610bc2565b6107cf5760008281526006602090815260408083206001600160a01b03851684529091529020805460ff191660011790556114a23390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561153f57507f000000000000000000000000000000000000000000000000000000000000000046145b1561156957507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6116178282610bc2565b156107cf5760008281526006602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b8154600090815b818110156116d857600061168f8284611c3d565b9050848682815481106116a4576116a4612869565b60009182526020909120015463ffffffff1611156116c4578092506116d2565b6116cf81600161283a565b91505b5061167b565b811561171c57846116ea600184612852565b815481106116fa576116fa612869565b60009182526020909120015464010000000090046001600160e01b031661171f565b60005b6001600160e01b031695945050505050565b60055460ff1661177a5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107bc565b6005805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600b54816117d160025490565b6117db919061283a565b11156118295760405162461bcd60e51b815260206004820152601960248201527f45524332304361707065643a206361702065786365656465640000000000000060448201526064016107bc565b6107cf8282611c58565b6107cf8282611ce2565b6000610885828461283a565b6001600160a01b038281166000818152600860208181526040808420805485845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611217828483611cfa565b600063ffffffff8211156119275760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b60648201526084016107bc565b5090565b60006108858284612852565b60055460ff161561197d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107bc565b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117a73390565b60006106426119bf6114e6565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611a1187878787611e37565b91509150611a1e81611f24565b5095945050505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b60055460ff161561073c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107bc565b61073c8383836120df565b60606000611ab08360026128f4565b611abb90600261283a565b67ffffffffffffffff811115611ad357611ad3612913565b6040519080825280601f01601f191660200182016040528015611afd576020820181803683370190505b509050600360fc1b81600081518110611b1857611b18612869565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611b4757611b47612869565b60200101906001600160f81b031916908160001a9053506000611b6b8460026128f4565b611b7690600161283a565b90505b6001811115611bee576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611baa57611baa612869565b1a60f81b828281518110611bc057611bc0612869565b60200101906001600160f81b031916908160001a90535060049490941c93611be781612929565b9050611b79565b5083156108855760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107bc565b6000611c4c6002848418612940565b6108859084841661283a565b611c628282612111565b6002546001600160e01b031015611cd45760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b60648201526084016107bc565b611217600a61183d83612204565b611cec828261237d565b611217600a61192b83612204565b816001600160a01b0316836001600160a01b031614158015611d1c5750600081115b1561073c576001600160a01b03831615611daa576001600160a01b03831660009081526009602052604081208190611d579061192b85612204565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611d9f929190918252602082015260400190565b60405180910390a250505b6001600160a01b0382161561073c576001600160a01b03821660009081526009602052604081208190611de09061183d85612204565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611e28929190918252602082015260400190565b60405180910390a25050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611e6e5750600090506003611f1b565b8460ff16601b14158015611e8657508460ff16601c14155b15611e975750600090506004611f1b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611eeb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611f1457600060019250925050611f1b565b9150600090505b94509492505050565b6000816004811115611f3857611f38612962565b1415611f415750565b6001816004811115611f5557611f55612962565b1415611fa35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016107bc565b6002816004811115611fb757611fb7612962565b14156120055760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016107bc565b600381600481111561201957612019612962565b14156120725760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016107bc565b600481600481111561208657612086612962565b14156108bf5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016107bc565b6001600160a01b0383811660009081526008602052604080822054858416835291205461073c92918216911683611cfa565b6001600160a01b0382166121675760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016107bc565b61217360008383611a50565b8060026000828254612185919061283a565b90915550506001600160a01b038216600090815260208190526040812080548392906121b290849061283a565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36107cf60008383611a96565b82546000908190801561224f578561221d600183612852565b8154811061222d5761222d612869565b60009182526020909120015464010000000090046001600160e01b0316612252565b60005b6001600160e01b0316925061226b83858763ffffffff16565b91506000811180156122a957504386612285600184612852565b8154811061229557612295612869565b60009182526020909120015463ffffffff16145b15612309576122b7826124de565b866122c3600184612852565b815481106122d3576122d3612869565b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b03160217905550612374565b85604051806040016040528061231e436118c2565b63ffffffff168152602001612332856124de565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b6001600160a01b0382166123dd5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107bc565b6123e982600083611a50565b6001600160a01b0382166000908152602081905260409020548181101561245d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016107bc565b6001600160a01b038316600090815260208190526040812083830390556002805484929061248c908490612852565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361073c83600084611a96565b60006001600160e01b038211156119275760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b60648201526084016107bc565b60006020828403121561255957600080fd5b81356001600160e01b03198116811461088557600080fd5b60005b8381101561258c578181015183820152602001612574565b838111156112175750506000910152565b60208152600082518060208401526125bc816040850160208701612571565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146125e757600080fd5b919050565b600080604083850312156125ff57600080fd5b612608836125d0565b946020939093013593505050565b60008060006060848603121561262b57600080fd5b612634846125d0565b9250612642602085016125d0565b9150604084013590509250925092565b60006020828403121561266457600080fd5b5035919050565b6000806040838503121561267e57600080fd5b8235915061268e602084016125d0565b90509250929050565b6000602082840312156126a957600080fd5b610885826125d0565b803560ff811681146125e757600080fd5b60008060008060008060c087890312156126dc57600080fd5b6126e5876125d0565b95506020870135945060408701359350612701606088016126b2565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561273657600080fd5b61273f886125d0565b965061274d602089016125d0565b95506040880135945060608801359350612769608089016126b2565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561279857600080fd5b6127a1836125d0565b915061268e602084016125d0565b600080604083850312156127c257600080fd5b6127cb836125d0565b9150602083013563ffffffff811681146127e457600080fd5b809150509250929050565b600181811c9082168061280357607f821691505b60208210811415611a4a57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561284d5761284d612824565b500190565b60008282101561286457612864612824565b500390565b634e487b7160e01b600052603260045260246000fd5b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516128b7816017850160208801612571565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516128e8816028840160208801612571565b01602801949350505050565b600081600019048311821515161561290e5761290e612824565b500290565b634e487b7160e01b600052604160045260246000fd5b60008161293857612938612824565b506000190190565b60008261295d57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220e39a34d1dacfc2da7c8b4560f42eb1e614f6ff834dc20bf706f2368c3ced1b4364736f6c634300080b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102535760003560e01c80635c975abb116101465780639ab24eb0116100c3578063d505accf11610087578063d505accf14610527578063d53913931461053a578063d547741f14610561578063dd62ed3e14610574578063e63ab1e9146105ad578063f1127ed8146105d457600080fd5b80639ab24eb0146104d3578063a217fddf146104e6578063a457c2d7146104ee578063a9059cbb14610501578063c3cda5201461051457600080fd5b80637ecebe001161010a5780637ecebe001461048a5780638456cb591461049d5780638e539e8c146104a557806391d14854146104b857806395d89b41146104cb57600080fd5b80635c975abb146104085780636fcfff451461041357806370a082311461043b5780637430a6891461046457806379cc67901461047757600080fd5b806336568abe116101d457806342966c681161019857806342966c681461037857806347786d371461038b578063523e95511461039e578063587cde1e146103b15780635c19a95c146103f557600080fd5b806336568abe1461032457806339509351146103375780633a46b1a81461034a5780633f4ba83a1461035d57806340c10f191461036557600080fd5b8063248a9ca31161021b578063248a9ca3146102cd5780632f2ff15d146102f0578063313ce56714610305578063355274ea146103145780633644e5151461031c57600080fd5b806301ffc9a71461025857806306fdde0314610280578063095ea7b31461029557806318160ddd146102a857806323b872dd146102ba575b600080fd5b61026b610266366004612547565b610611565b60405190151581526020015b60405180910390f35b610288610648565b604051610277919061259d565b61026b6102a33660046125ec565b6106da565b6002545b604051908152602001610277565b61026b6102c8366004612616565b6106f2565b6102ac6102db366004612652565b60009081526006602052604090206001015490565b6103036102fe36600461266b565b610716565b005b60405160128152602001610277565b600b546102ac565b6102ac610741565b61030361033236600461266b565b610750565b61026b6103453660046125ec565b6107d3565b6102ac6103583660046125ec565b610812565b61030361088c565b6103036103733660046125ec565b6108c2565b610303610386366004612652565b6108f7565b610303610399366004612652565b610901565b6103036103ac366004612652565b610996565b6103dd6103bf366004612697565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b039091168152602001610277565b610303610403366004612697565b610a2a565b60055460ff1661026b565b610426610421366004612697565b610a34565b60405163ffffffff9091168152602001610277565b6102ac610449366004612697565b6001600160a01b031660009081526020819052604090205490565b610303610472366004612652565b610a56565b6103036104853660046125ec565b610b00565b6102ac610498366004612697565b610b15565b610303610b33565b6102ac6104b3366004612652565b610b66565b61026b6104c636600461266b565b610bc2565b610288610bed565b6102ac6104e1366004612697565b610bfc565b6102ac600081565b61026b6104fc3660046125ec565b610c83565b61026b61050f3660046125ec565b610d15565b6103036105223660046126c3565b610d23565b61030361053536600461271b565b610e59565b6102ac7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61030361056f36600461266b565b610fbd565b6102ac610582366004612785565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102ac7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6105e76105e23660046127af565b610fe3565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610277565b60006001600160e01b03198216637965db0b60e01b148061064257506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610657906127ef565b80601f0160208091040260200160405190810160405280929190818152602001828054610683906127ef565b80156106d05780601f106106a5576101008083540402835291602001916106d0565b820191906000526020600020905b8154815290600101906020018083116106b357829003601f168201915b5050505050905090565b6000336106e8818585611067565b5060019392505050565b60003361070085828561118b565b61070b85858561121d565b506001949350505050565b60008281526006602052604090206001015461073281336113fc565b61073c8383611460565b505050565b600061074b6114e6565b905090565b6001600160a01b03811633146107c55760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107cf828261160d565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091906106e8908290869061080d90879061283a565b611067565b60004382106108635760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064016107bc565b6001600160a01b03831660009081526009602052604090206108859083611674565b9392505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108b781336113fc565b6108bf611731565b50565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66108ed81336113fc565b61073c83836117c4565b6108bf3382611833565b600061090d81336113fc565b60025482116109905760405162461bcd60e51b815260206004820152604360248201527f4552433230437573746f6d3a204e6577206361702073657420746f206265206c60448201527f6f776572207468616e206f7220657175616c20746f20746f74616c20737570706064820152626c792160e81b608482015260a4016107bc565b50600b55565b60006109a281336113fc565b60008211610a115760405162461bcd60e51b815260206004820152603660248201527f4552433230437573746f6d3a20496e637265617365204361702076616c756520604482015275686173206e6f6e2d76616c696420302076616c75652160501b60648201526084016107bc565b610a23610a1d600b5490565b8361183d565b600b555050565b6108bf3382611849565b6001600160a01b038116600090815260096020526040812054610642906118c2565b6000610a6281336113fc565b600082118015610a855750610a81610a79600b5490565b60025461192b565b8211155b610aee5760405162461bcd60e51b815260206004820152603460248201527f4552433230437573746f6d3a204465637265617365204361702076616c756520604482015273686173206e6f6e2d76616c69642076616c75652160601b60648201526084016107bc565b610a23610afa600b5490565b8361192b565b610b0b82338361118b565b6107cf8282611833565b6001600160a01b038116600090815260076020526040812054610642565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b5e81336113fc565b6108bf611937565b6000438210610bb75760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064016107bc565b610642600a83611674565b60009182526006602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610657906127ef565b6001600160a01b0381166000908152600960205260408120548015610c70576001600160a01b0383166000908152600960205260409020610c3e600183612852565b81548110610c4e57610c4e612869565b60009182526020909120015464010000000090046001600160e01b0316610c73565b60005b6001600160e01b03169392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610d085760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107bc565b61070b8286868403611067565b6000336106e881858561121d565b83421115610d735760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e6174757265206578706972656400000060448201526064016107bc565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610ded90610de59060a001604051602081830303815290604052805190602001206119b2565b858585611a00565b9050610df881611a28565b8614610e465760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e63650000000000000060448201526064016107bc565b610e508188611849565b50505050505050565b83421115610ea95760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016107bc565b60007f0000000000000000000000000000000000000000000000000000000000000000888888610ed88c611a28565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610f33826119b2565b90506000610f4382878787611a00565b9050896001600160a01b0316816001600160a01b031614610fa65760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016107bc565b610fb18a8a8a611067565b50505050505050505050565b600082815260066020526040902060010154610fd981336113fc565b61073c838361160d565b60408051808201909152600080825260208201526001600160a01b0383166000908152600960205260409020805463ffffffff841690811061102757611027612869565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6001600160a01b0383166110c95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107bc565b6001600160a01b03821661112a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107bc565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611217578181101561120a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107bc565b6112178484848403611067565b50505050565b6001600160a01b0383166112815760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107bc565b6001600160a01b0382166112e35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107bc565b6112ee838383611a50565b6001600160a01b038316600090815260208190526040902054818110156113665760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107bc565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061139d90849061283a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113e991815260200190565b60405180910390a3611217848484611a96565b6114068282610bc2565b6107cf5761141e816001600160a01b03166014611aa1565b611429836020611aa1565b60405160200161143a92919061287f565b60408051601f198184030181529082905262461bcd60e51b82526107bc9160040161259d565b61146a8282610bc2565b6107cf5760008281526006602090815260408083206001600160a01b03851684529091529020805460ff191660011790556114a23390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561153f57507f000000000000000000000000000000000000000000000000000000000000000046145b1561156957507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6116178282610bc2565b156107cf5760008281526006602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b8154600090815b818110156116d857600061168f8284611c3d565b9050848682815481106116a4576116a4612869565b60009182526020909120015463ffffffff1611156116c4578092506116d2565b6116cf81600161283a565b91505b5061167b565b811561171c57846116ea600184612852565b815481106116fa576116fa612869565b60009182526020909120015464010000000090046001600160e01b031661171f565b60005b6001600160e01b031695945050505050565b60055460ff1661177a5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107bc565b6005805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600b54816117d160025490565b6117db919061283a565b11156118295760405162461bcd60e51b815260206004820152601960248201527f45524332304361707065643a206361702065786365656465640000000000000060448201526064016107bc565b6107cf8282611c58565b6107cf8282611ce2565b6000610885828461283a565b6001600160a01b038281166000818152600860208181526040808420805485845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611217828483611cfa565b600063ffffffff8211156119275760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b60648201526084016107bc565b5090565b60006108858284612852565b60055460ff161561197d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107bc565b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117a73390565b60006106426119bf6114e6565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611a1187878787611e37565b91509150611a1e81611f24565b5095945050505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b60055460ff161561073c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107bc565b61073c8383836120df565b60606000611ab08360026128f4565b611abb90600261283a565b67ffffffffffffffff811115611ad357611ad3612913565b6040519080825280601f01601f191660200182016040528015611afd576020820181803683370190505b509050600360fc1b81600081518110611b1857611b18612869565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611b4757611b47612869565b60200101906001600160f81b031916908160001a9053506000611b6b8460026128f4565b611b7690600161283a565b90505b6001811115611bee576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611baa57611baa612869565b1a60f81b828281518110611bc057611bc0612869565b60200101906001600160f81b031916908160001a90535060049490941c93611be781612929565b9050611b79565b5083156108855760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107bc565b6000611c4c6002848418612940565b6108859084841661283a565b611c628282612111565b6002546001600160e01b031015611cd45760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b60648201526084016107bc565b611217600a61183d83612204565b611cec828261237d565b611217600a61192b83612204565b816001600160a01b0316836001600160a01b031614158015611d1c5750600081115b1561073c576001600160a01b03831615611daa576001600160a01b03831660009081526009602052604081208190611d579061192b85612204565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611d9f929190918252602082015260400190565b60405180910390a250505b6001600160a01b0382161561073c576001600160a01b03821660009081526009602052604081208190611de09061183d85612204565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611e28929190918252602082015260400190565b60405180910390a25050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611e6e5750600090506003611f1b565b8460ff16601b14158015611e8657508460ff16601c14155b15611e975750600090506004611f1b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611eeb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611f1457600060019250925050611f1b565b9150600090505b94509492505050565b6000816004811115611f3857611f38612962565b1415611f415750565b6001816004811115611f5557611f55612962565b1415611fa35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016107bc565b6002816004811115611fb757611fb7612962565b14156120055760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016107bc565b600381600481111561201957612019612962565b14156120725760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016107bc565b600481600481111561208657612086612962565b14156108bf5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016107bc565b6001600160a01b0383811660009081526008602052604080822054858416835291205461073c92918216911683611cfa565b6001600160a01b0382166121675760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016107bc565b61217360008383611a50565b8060026000828254612185919061283a565b90915550506001600160a01b038216600090815260208190526040812080548392906121b290849061283a565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36107cf60008383611a96565b82546000908190801561224f578561221d600183612852565b8154811061222d5761222d612869565b60009182526020909120015464010000000090046001600160e01b0316612252565b60005b6001600160e01b0316925061226b83858763ffffffff16565b91506000811180156122a957504386612285600184612852565b8154811061229557612295612869565b60009182526020909120015463ffffffff16145b15612309576122b7826124de565b866122c3600184612852565b815481106122d3576122d3612869565b9060005260206000200160000160046101000a8154816001600160e01b0302191690836001600160e01b03160217905550612374565b85604051806040016040528061231e436118c2565b63ffffffff168152602001612332856124de565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b50935093915050565b6001600160a01b0382166123dd5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107bc565b6123e982600083611a50565b6001600160a01b0382166000908152602081905260409020548181101561245d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016107bc565b6001600160a01b038316600090815260208190526040812083830390556002805484929061248c908490612852565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361073c83600084611a96565b60006001600160e01b038211156119275760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b60648201526084016107bc565b60006020828403121561255957600080fd5b81356001600160e01b03198116811461088557600080fd5b60005b8381101561258c578181015183820152602001612574565b838111156112175750506000910152565b60208152600082518060208401526125bc816040850160208701612571565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146125e757600080fd5b919050565b600080604083850312156125ff57600080fd5b612608836125d0565b946020939093013593505050565b60008060006060848603121561262b57600080fd5b612634846125d0565b9250612642602085016125d0565b9150604084013590509250925092565b60006020828403121561266457600080fd5b5035919050565b6000806040838503121561267e57600080fd5b8235915061268e602084016125d0565b90509250929050565b6000602082840312156126a957600080fd5b610885826125d0565b803560ff811681146125e757600080fd5b60008060008060008060c087890312156126dc57600080fd5b6126e5876125d0565b95506020870135945060408701359350612701606088016126b2565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561273657600080fd5b61273f886125d0565b965061274d602089016125d0565b95506040880135945060608801359350612769608089016126b2565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561279857600080fd5b6127a1836125d0565b915061268e602084016125d0565b600080604083850312156127c257600080fd5b6127cb836125d0565b9150602083013563ffffffff811681146127e457600080fd5b809150509250929050565b600181811c9082168061280357607f821691505b60208210811415611a4a57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561284d5761284d612824565b500190565b60008282101561286457612864612824565b500390565b634e487b7160e01b600052603260045260246000fd5b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516128b7816017850160208801612571565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516128e8816028840160208801612571565b01602801949350505050565b600081600019048311821515161561290e5761290e612824565b500290565b634e487b7160e01b600052604160045260246000fd5b60008161293857612938612824565b506000190190565b60008261295d57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220e39a34d1dacfc2da7c8b4560f42eb1e614f6ff834dc20bf706f2368c3ced1b4364736f6c634300080b0033",
  "immutableReferences": {
    "3618": [
      {
        "length": 32,
        "start": 3757
      }
    ],
    "6080": [
      {
        "length": 32,
        "start": 5447
      }
    ],
    "6082": [
      {
        "length": 32,
        "start": 5405
      }
    ],
    "6084": [
      {
        "length": 32,
        "start": 5363
      }
    ],
    "6086": [
      {
        "length": 32,
        "start": 5530
      }
    ],
    "6088": [
      {
        "length": 32,
        "start": 5567
      }
    ],
    "6090": [
      {
        "length": 32,
        "start": 5488
      }
    ]
  },
  "generatedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:2890:56",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:56",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "46:95:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "63:1:56",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "70:3:56",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "75:10:56",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "66:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "66:20:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "56:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "56:31:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "56:31:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "103:1:56",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "106:4:56",
                        "type": "",
                        "value": "0x41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "96:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "96:15:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "96:15:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "127:1:56",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "130:4:56",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "120:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "120:15:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "120:15:56"
                }
              ]
            },
            "name": "panic_error_0x41",
            "nodeType": "YulFunctionDefinition",
            "src": "14:127:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "210:821:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "259:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "268:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "271:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "261:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "261:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "261:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "238:6:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "246:4:56",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "234:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "234:17:56"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "253:3:56"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "230:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "230:27:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "223:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "223:35:56"
                  },
                  "nodeType": "YulIf",
                  "src": "220:55:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "284:23:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "300:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "294:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "294:13:56"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "288:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "316:28:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "334:2:56",
                            "type": "",
                            "value": "64"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "338:1:56",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "330:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "330:10:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "342:1:56",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "326:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "326:18:56"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "320:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "367:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "369:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "369:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "369:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "359:2:56"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "363:2:56"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "356:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "356:10:56"
                  },
                  "nodeType": "YulIf",
                  "src": "353:36:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "398:17:56",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "412:2:56",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "not",
                      "nodeType": "YulIdentifier",
                      "src": "408:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "408:7:56"
                  },
                  "variables": [
                    {
                      "name": "_3",
                      "nodeType": "YulTypedName",
                      "src": "402:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "424:23:56",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "444:2:56",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "438:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "438:9:56"
                  },
                  "variables": [
                    {
                      "name": "memPtr",
                      "nodeType": "YulTypedName",
                      "src": "428:6:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "456:71:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "478:6:56"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "502:2:56"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "506:4:56",
                                        "type": "",
                                        "value": "0x1f"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "498:3:56"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "498:13:56"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "513:2:56"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "494:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "494:22:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "518:2:56",
                                "type": "",
                                "value": "63"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "490:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "490:31:56"
                          },
                          {
                            "name": "_3",
                            "nodeType": "YulIdentifier",
                            "src": "523:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "486:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "486:40:56"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "474:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "474:53:56"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nodeType": "YulTypedName",
                      "src": "460:10:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "586:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "588:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "588:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "588:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "545:10:56"
                          },
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "557:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "542:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "542:18:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "565:10:56"
                          },
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "577:6:56"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "562:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "562:22:56"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "539:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "539:46:56"
                  },
                  "nodeType": "YulIf",
                  "src": "536:72:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "624:2:56",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nodeType": "YulIdentifier",
                        "src": "628:10:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "617:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "617:22:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "617:22:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "655:6:56"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "663:2:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "648:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "648:18:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "648:18:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "675:14:56",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "685:4:56",
                    "type": "",
                    "value": "0x20"
                  },
                  "variables": [
                    {
                      "name": "_4",
                      "nodeType": "YulTypedName",
                      "src": "679:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "735:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "744:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "747:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "737:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "737:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "737:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "712:6:56"
                              },
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "720:2:56"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "708:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "708:15:56"
                          },
                          {
                            "name": "_4",
                            "nodeType": "YulIdentifier",
                            "src": "725:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "704:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "704:24:56"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "730:3:56"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "701:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "701:33:56"
                  },
                  "nodeType": "YulIf",
                  "src": "698:53:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "760:10:56",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "769:1:56",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "764:1:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "825:87:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "memPtr",
                                      "nodeType": "YulIdentifier",
                                      "src": "854:6:56"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "862:1:56"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "850:3:56"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "850:14:56"
                                },
                                {
                                  "name": "_4",
                                  "nodeType": "YulIdentifier",
                                  "src": "866:2:56"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "846:3:56"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "846:23:56"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "offset",
                                          "nodeType": "YulIdentifier",
                                          "src": "885:6:56"
                                        },
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "893:1:56"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "881:3:56"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "881:14:56"
                                    },
                                    {
                                      "name": "_4",
                                      "nodeType": "YulIdentifier",
                                      "src": "897:2:56"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "877:3:56"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "877:23:56"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "871:5:56"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "871:30:56"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "839:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "839:63:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "839:63:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "790:1:56"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "793:2:56"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "787:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "787:9:56"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "797:19:56",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "799:15:56",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "808:1:56"
                            },
                            {
                              "name": "_4",
                              "nodeType": "YulIdentifier",
                              "src": "811:2:56"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "804:3:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "804:10:56"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "799:1:56"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "783:3:56",
                    "statements": []
                  },
                  "src": "779:133:56"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "942:59:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "memPtr",
                                      "nodeType": "YulIdentifier",
                                      "src": "971:6:56"
                                    },
                                    {
                                      "name": "_1",
                                      "nodeType": "YulIdentifier",
                                      "src": "979:2:56"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "967:3:56"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "967:15:56"
                                },
                                {
                                  "name": "_4",
                                  "nodeType": "YulIdentifier",
                                  "src": "984:2:56"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "963:3:56"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "963:24:56"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "989:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "956:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "956:35:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "956:35:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "927:1:56"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "930:2:56"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "924:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "924:9:56"
                  },
                  "nodeType": "YulIf",
                  "src": "921:80:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1010:15:56",
                  "value": {
                    "name": "memPtr",
                    "nodeType": "YulIdentifier",
                    "src": "1019:6:56"
                  },
                  "variableNames": [
                    {
                      "name": "array",
                      "nodeType": "YulIdentifier",
                      "src": "1010:5:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_string_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "184:6:56",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "192:3:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "200:5:56",
                "type": ""
              }
            ],
            "src": "146:885:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1171:488:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1217:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1226:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1229:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1219:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1219:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1219:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1192:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1201:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1188:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1188:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1213:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1184:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1184:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "1181:52:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1242:30:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1262:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "1256:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1256:16:56"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "1246:6:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1281:28:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1299:2:56",
                            "type": "",
                            "value": "64"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1303:1:56",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "1295:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1295:10:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1307:1:56",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "1291:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1291:18:56"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "1285:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1336:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1345:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1348:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1338:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1338:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1338:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1324:6:56"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "1332:2:56"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1321:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1321:14:56"
                  },
                  "nodeType": "YulIf",
                  "src": "1318:34:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1361:71:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1404:9:56"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "1415:6:56"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1400:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1400:22:56"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "1424:7:56"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_string_fromMemory",
                      "nodeType": "YulIdentifier",
                      "src": "1371:28:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1371:61:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1361:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1441:41:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1467:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1478:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1463:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1463:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "1457:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1457:25:56"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "1445:8:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1511:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1520:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1523:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1513:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1513:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1513:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "1497:8:56"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "1507:2:56"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1494:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1494:16:56"
                  },
                  "nodeType": "YulIf",
                  "src": "1491:36:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1536:73:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1579:9:56"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "1590:8:56"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1575:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1575:24:56"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "1601:7:56"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_string_fromMemory",
                      "nodeType": "YulIdentifier",
                      "src": "1546:28:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1546:63:56"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "1536:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1618:35:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1638:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1649:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1634:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1634:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "1628:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1628:25:56"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "1618:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1121:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1132:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1144:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "1152:6:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "1160:6:56",
                "type": ""
              }
            ],
            "src": "1036:623:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1838:171:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1855:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1866:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1848:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1848:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1848:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1889:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1900:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1885:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1885:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1905:2:56",
                        "type": "",
                        "value": "21"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1878:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1878:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1878:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1928:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1939:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1924:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1924:18:56"
                      },
                      {
                        "hexValue": "45524332304361707065643a206361702069732030",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "1944:23:56",
                        "type": "",
                        "value": "ERC20Capped: cap is 0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1917:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1917:51:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1917:51:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1977:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1989:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2000:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1985:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1985:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1977:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_073f3193e2b9c9099973df1adea790edf33994edcd3f57beae2487f3c5bd8828__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1815:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1829:4:56",
                "type": ""
              }
            ],
            "src": "1664:345:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2227:276:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2237:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2249:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2260:3:56",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2245:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2245:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2237:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2280:9:56"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "2291:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2273:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2273:25:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2273:25:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2318:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2329:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2314:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2314:18:56"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "2334:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2307:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2307:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2307:34:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2361:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2372:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2357:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2357:18:56"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "2377:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2350:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2350:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2350:34:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2404:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2415:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2400:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2400:18:56"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "2420:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2393:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2393:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2393:34:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2447:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2458:3:56",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2443:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2443:19:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value4",
                            "nodeType": "YulIdentifier",
                            "src": "2468:6:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2484:3:56",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2489:1:56",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "2480:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2480:11:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2493:1:56",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "2476:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2476:19:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "2464:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2464:32:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2436:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2436:61:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2436:61:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2164:9:56",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "2175:6:56",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "2183:6:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "2191:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2199:6:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2207:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2218:4:56",
                "type": ""
              }
            ],
            "src": "2014:489:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2563:325:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2573:22:56",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2587:1:56",
                        "type": "",
                        "value": "1"
                      },
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "2590:4:56"
                      }
                    ],
                    "functionName": {
                      "name": "shr",
                      "nodeType": "YulIdentifier",
                      "src": "2583:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2583:12:56"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "2573:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2604:38:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "2634:4:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2640:1:56",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "2630:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2630:12:56"
                  },
                  "variables": [
                    {
                      "name": "outOfPlaceEncoding",
                      "nodeType": "YulTypedName",
                      "src": "2608:18:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2681:31:56",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "2683:27:56",
                        "value": {
                          "arguments": [
                            {
                              "name": "length",
                              "nodeType": "YulIdentifier",
                              "src": "2697:6:56"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2705:4:56",
                              "type": "",
                              "value": "0x7f"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "2693:3:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2693:17:56"
                        },
                        "variableNames": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "2683:6:56"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "outOfPlaceEncoding",
                        "nodeType": "YulIdentifier",
                        "src": "2661:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "2654:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2654:26:56"
                  },
                  "nodeType": "YulIf",
                  "src": "2651:61:56"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2771:111:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2792:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2799:3:56",
                                  "type": "",
                                  "value": "224"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2804:10:56",
                                  "type": "",
                                  "value": "0x4e487b71"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nodeType": "YulIdentifier",
                                "src": "2795:3:56"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2795:20:56"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "2785:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2785:31:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2785:31:56"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2836:1:56",
                              "type": "",
                              "value": "4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2839:4:56",
                              "type": "",
                              "value": "0x22"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "2829:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2829:15:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2829:15:56"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2864:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2867:4:56",
                              "type": "",
                              "value": "0x24"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2857:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2857:15:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2857:15:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "outOfPlaceEncoding",
                        "nodeType": "YulIdentifier",
                        "src": "2727:18:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "2750:6:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2758:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "2747:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2747:14:56"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nodeType": "YulIdentifier",
                      "src": "2724:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2724:38:56"
                  },
                  "nodeType": "YulIf",
                  "src": "2721:161:56"
                }
              ]
            },
            "name": "extract_byte_array_length",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "data",
                "nodeType": "YulTypedName",
                "src": "2543:4:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "2552:6:56",
                "type": ""
              }
            ],
            "src": "2508:380:56"
          }
        ]
      },
      "contents": "{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let _2 := sub(shl(64, 1), 1)\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        let _4 := 0x20\n        if gt(add(add(offset, _1), _4), end) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _1) { i := add(i, _4) }\n        {\n            mstore(add(add(memPtr, i), _4), mload(add(add(offset, i), _4)))\n        }\n        if gt(i, _1)\n        {\n            mstore(add(add(memPtr, _1), _4), 0)\n        }\n        array := memPtr\n    }\n    function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n        let offset_1 := mload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n        value2 := mload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_stringliteral_073f3193e2b9c9099973df1adea790edf33994edcd3f57beae2487f3c5bd8828__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"ERC20Capped: cap is 0\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}",
      "id": 56,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:22679:56",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:56",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "83:217:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "129:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "138:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "141:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "131:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "131:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "131:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "104:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "113:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "100:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "100:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "125:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "96:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "96:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "93:52:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "154:36:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "180:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "167:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "167:23:56"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "158:5:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "254:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "263:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "266:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "256:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "256:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "256:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "212:5:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "223:5:56"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "234:3:56",
                                    "type": "",
                                    "value": "224"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "239:10:56",
                                    "type": "",
                                    "value": "0xffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "230:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "230:20:56"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "219:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "219:32:56"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "209:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "209:43:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "202:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "202:51:56"
                  },
                  "nodeType": "YulIf",
                  "src": "199:71:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "279:15:56",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "289:5:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "279:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes4",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "49:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "60:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "72:6:56",
                "type": ""
              }
            ],
            "src": "14:286:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "400:92:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "410:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "422:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "433:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "418:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "418:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "410:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "452:9:56"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "477:6:56"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "470:6:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "470:14:56"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "463:6:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "463:22:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "445:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "445:41:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "445:41:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "369:9:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "380:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "391:4:56",
                "type": ""
              }
            ],
            "src": "305:187:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "550:205:56",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "560:10:56",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "569:1:56",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "564:1:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "629:63:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "654:3:56"
                                },
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "659:1:56"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "650:3:56"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "650:11:56"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "src",
                                      "nodeType": "YulIdentifier",
                                      "src": "673:3:56"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "678:1:56"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "669:3:56"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "669:11:56"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "663:5:56"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "663:18:56"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "643:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "643:39:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "643:39:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "590:1:56"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "593:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "587:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "587:13:56"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "601:19:56",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "603:15:56",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "612:1:56"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "615:2:56",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "608:3:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "608:10:56"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "603:1:56"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "583:3:56",
                    "statements": []
                  },
                  "src": "579:113:56"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "718:31:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "731:3:56"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "736:6:56"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "727:3:56"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "727:16:56"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "745:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "720:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "720:27:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "720:27:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "707:1:56"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "710:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "704:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "704:13:56"
                  },
                  "nodeType": "YulIf",
                  "src": "701:48:56"
                }
              ]
            },
            "name": "copy_memory_to_memory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "528:3:56",
                "type": ""
              },
              {
                "name": "dst",
                "nodeType": "YulTypedName",
                "src": "533:3:56",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "538:6:56",
                "type": ""
              }
            ],
            "src": "497:258:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "881:262:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "898:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "909:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "891:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "891:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "891:21:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "921:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "941:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "935:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "935:13:56"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "925:6:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "968:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "979:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "964:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "964:18:56"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "984:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "957:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "957:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "957:34:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "1026:6:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1034:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1022:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1022:15:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1043:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1054:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1039:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1039:18:56"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1059:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "1000:21:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1000:66:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1000:66:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1075:62:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1091:9:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1110:6:56"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1118:2:56",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1106:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1106:15:56"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1127:2:56",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "1123:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1123:7:56"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "1102:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1102:29:56"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1087:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1087:45:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1134:2:56",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1083:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1083:54:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1075:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "850:9:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "861:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "872:4:56",
                "type": ""
              }
            ],
            "src": "760:383:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1197:124:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1207:29:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1229:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1216:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1216:20:56"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "1207:5:56"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1299:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1308:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1311:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1301:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1301:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1301:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "1258:5:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "1269:5:56"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1284:3:56",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1289:1:56",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "1280:3:56"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1280:11:56"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1293:1:56",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "1276:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1276:19:56"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "1265:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1265:31:56"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "1255:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1255:42:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "1248:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1248:50:56"
                  },
                  "nodeType": "YulIf",
                  "src": "1245:70:56"
                }
              ]
            },
            "name": "abi_decode_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "1176:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "1187:5:56",
                "type": ""
              }
            ],
            "src": "1148:173:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1413:167:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1459:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1468:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1471:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1461:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1461:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1461:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1434:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1443:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1430:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1430:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1455:2:56",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1426:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1426:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "1423:52:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1484:39:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1513:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "1494:18:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1494:29:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1484:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1532:42:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1559:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1570:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1555:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1555:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1542:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1542:32:56"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "1532:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1371:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1382:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1394:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "1402:6:56",
                "type": ""
              }
            ],
            "src": "1326:254:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1686:76:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1696:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1708:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1719:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1704:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1704:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1696:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1738:9:56"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "1749:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1731:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1731:25:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1731:25:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1655:9:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1666:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1677:4:56",
                "type": ""
              }
            ],
            "src": "1585:177:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1871:224:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1917:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1926:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1929:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1919:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1919:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1919:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1892:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1901:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1888:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1888:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1913:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1884:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1884:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "1881:52:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1942:39:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1971:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "1952:18:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1952:29:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1942:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1990:48:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2023:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2034:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2019:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2019:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "2000:18:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2000:38:56"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "1990:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2047:42:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2074:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2085:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2070:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2070:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2057:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2057:32:56"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "2047:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_addresst_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1821:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1832:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1844:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "1852:6:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "1860:6:56",
                "type": ""
              }
            ],
            "src": "1767:328:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2170:110:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2216:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2225:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2228:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2218:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2218:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2218:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2191:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2200:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2187:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2187:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2212:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2183:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2183:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "2180:52:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2241:33:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2264:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2251:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2251:23:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "2241:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2136:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "2147:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2159:6:56",
                "type": ""
              }
            ],
            "src": "2100:180:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2386:76:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2396:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2408:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2419:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2404:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2404:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2396:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2438:9:56"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "2449:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2431:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2431:25:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2431:25:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2355:9:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2366:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2377:4:56",
                "type": ""
              }
            ],
            "src": "2285:177:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2554:167:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2600:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2609:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2612:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2602:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2602:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2602:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2575:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2584:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2571:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2571:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2596:2:56",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2567:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2567:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "2564:52:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2625:33:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2648:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2635:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2635:23:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "2625:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2667:48:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2700:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2711:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2696:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2696:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "2677:18:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2677:38:56"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "2667:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2512:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "2523:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2535:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2543:6:56",
                "type": ""
              }
            ],
            "src": "2467:254:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2823:87:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2833:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2845:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2856:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2841:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2841:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2833:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2875:9:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "2890:6:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2898:4:56",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "2886:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2886:17:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2868:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2868:36:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2868:36:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2792:9:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2803:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2814:4:56",
                "type": ""
              }
            ],
            "src": "2726:184:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2985:110:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3031:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3040:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3043:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3033:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3033:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3033:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3006:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3015:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3002:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3002:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3027:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2998:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2998:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "2995:52:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3056:33:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3079:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3066:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3066:23:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3056:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2951:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "2962:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2974:6:56",
                "type": ""
              }
            ],
            "src": "2915:180:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3170:116:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3216:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3225:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3228:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3218:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3218:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3218:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3191:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3200:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3187:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3187:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3212:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3183:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3183:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "3180:52:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3241:39:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3270:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "3251:18:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3251:29:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3241:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3136:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3147:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3159:6:56",
                "type": ""
              }
            ],
            "src": "3100:186:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3392:102:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3402:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3414:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3425:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3410:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3410:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3402:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3444:9:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "3459:6:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3475:3:56",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3480:1:56",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "3471:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3471:11:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3484:1:56",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "3467:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3467:19:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "3455:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3455:32:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3437:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3437:51:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3437:51:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3361:9:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3372:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3383:4:56",
                "type": ""
              }
            ],
            "src": "3291:203:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3598:93:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3608:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3620:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3631:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3616:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3616:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3608:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3650:9:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "3665:6:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3673:10:56",
                            "type": "",
                            "value": "0xffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "3661:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3661:23:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3643:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3643:42:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3643:42:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3567:9:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3578:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3589:4:56",
                "type": ""
              }
            ],
            "src": "3499:192:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3743:109:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3753:29:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "3775:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3762:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3762:20:56"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "3753:5:56"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3830:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3839:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3842:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3832:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3832:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3832:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "3804:5:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "3815:5:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "3822:4:56",
                                "type": "",
                                "value": "0xff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "3811:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3811:16:56"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "3801:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3801:27:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "3794:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3794:35:56"
                  },
                  "nodeType": "YulIf",
                  "src": "3791:55:56"
                }
              ]
            },
            "name": "abi_decode_uint8",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "3722:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "3733:5:56",
                "type": ""
              }
            ],
            "src": "3696:156:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4010:378:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4057:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4066:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4069:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4059:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4059:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4059:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4031:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4040:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4027:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4027:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4052:3:56",
                        "type": "",
                        "value": "192"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "4023:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4023:33:56"
                  },
                  "nodeType": "YulIf",
                  "src": "4020:53:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4082:39:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4111:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "4092:18:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4092:29:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "4082:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4130:42:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4157:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4168:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4153:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4153:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4140:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4140:32:56"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "4130:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4181:42:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4208:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4219:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4204:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4204:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4191:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4191:32:56"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "4181:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4232:46:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4263:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4274:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4259:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4259:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint8",
                      "nodeType": "YulIdentifier",
                      "src": "4242:16:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4242:36:56"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "4232:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4287:43:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4314:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4325:3:56",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4310:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4310:19:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4297:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4297:33:56"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "4287:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4339:43:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4366:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4377:3:56",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4362:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4362:19:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4349:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4349:33:56"
                  },
                  "variableNames": [
                    {
                      "name": "value5",
                      "nodeType": "YulIdentifier",
                      "src": "4339:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3936:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3947:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3959:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3967:6:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "3975:6:56",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "3983:6:56",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "3991:6:56",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "3999:6:56",
                "type": ""
              }
            ],
            "src": "3857:531:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4563:436:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4610:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4619:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4622:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4612:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4612:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4612:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4584:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4593:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4580:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4580:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4605:3:56",
                        "type": "",
                        "value": "224"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "4576:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4576:33:56"
                  },
                  "nodeType": "YulIf",
                  "src": "4573:53:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4635:39:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4664:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "4645:18:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4645:29:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "4635:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4683:48:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4716:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4727:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4712:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4712:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "4693:18:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4693:38:56"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "4683:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4740:42:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4767:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4778:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4763:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4763:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4750:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4750:32:56"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "4740:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4791:42:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4818:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4829:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4814:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4814:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4801:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4801:32:56"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "4791:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4842:47:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4873:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4884:3:56",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4869:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4869:19:56"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint8",
                      "nodeType": "YulIdentifier",
                      "src": "4852:16:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4852:37:56"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "4842:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4898:43:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4925:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4936:3:56",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4921:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4921:19:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4908:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4908:33:56"
                  },
                  "variableNames": [
                    {
                      "name": "value5",
                      "nodeType": "YulIdentifier",
                      "src": "4898:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4950:43:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4977:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4988:3:56",
                            "type": "",
                            "value": "192"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4973:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4973:19:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4960:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4960:33:56"
                  },
                  "variableNames": [
                    {
                      "name": "value6",
                      "nodeType": "YulIdentifier",
                      "src": "4950:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4481:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "4492:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4504:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "4512:6:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "4520:6:56",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "4528:6:56",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "4536:6:56",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "4544:6:56",
                "type": ""
              },
              {
                "name": "value6",
                "nodeType": "YulTypedName",
                "src": "4552:6:56",
                "type": ""
              }
            ],
            "src": "4393:606:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5091:173:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5137:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5146:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5149:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5139:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5139:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5139:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5112:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5121:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5108:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5108:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5133:2:56",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5104:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5104:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "5101:52:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5162:39:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5191:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "5172:18:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5172:29:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "5162:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5210:48:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5243:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5254:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5239:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5239:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "5220:18:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5220:38:56"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "5210:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5049:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5060:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5072:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "5080:6:56",
                "type": ""
              }
            ],
            "src": "5004:260:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5355:264:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5401:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5410:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5413:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5403:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5403:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5403:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5376:7:56"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5385:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5372:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5372:23:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5397:2:56",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5368:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5368:32:56"
                  },
                  "nodeType": "YulIf",
                  "src": "5365:52:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5426:39:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5455:9:56"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "5436:18:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5436:29:56"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "5426:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5474:45:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5504:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5515:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5500:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5500:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5487:12:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5487:32:56"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "5478:5:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5573:16:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5582:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5585:1:56",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5575:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5575:12:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5575:12:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "5541:5:56"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "5552:5:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5559:10:56",
                                "type": "",
                                "value": "0xffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "5548:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5548:22:56"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "5538:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5538:33:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "5531:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5531:41:56"
                  },
                  "nodeType": "YulIf",
                  "src": "5528:61:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5598:15:56",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "5608:5:56"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "5598:6:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_uint32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5313:9:56",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5324:7:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5336:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "5344:6:56",
                "type": ""
              }
            ],
            "src": "5269:350:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5781:189:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "5791:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5803:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5814:2:56",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5799:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5799:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "5791:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5833:9:56"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "5854:6:56"
                              }
                            ],
                            "functionName": {
                              "name": "mload",
                              "nodeType": "YulIdentifier",
                              "src": "5848:5:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5848:13:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5863:10:56",
                            "type": "",
                            "value": "0xffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "5844:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5844:30:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5826:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5826:49:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5826:49:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5895:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5906:4:56",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5891:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5891:20:56"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "5927:6:56"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5935:4:56",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "5923:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5923:17:56"
                              }
                            ],
                            "functionName": {
                              "name": "mload",
                              "nodeType": "YulIdentifier",
                              "src": "5917:5:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5917:24:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5951:3:56",
                                    "type": "",
                                    "value": "224"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5956:1:56",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "5947:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5947:11:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5960:1:56",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "5943:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5943:19:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "5913:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5913:50:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5884:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5884:80:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5884:80:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_struct$_Checkpoint_$2945_memory_ptr__to_t_struct$_Checkpoint_$2945_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5750:9:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5761:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "5772:4:56",
                "type": ""
              }
            ],
            "src": "5624:346:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6030:325:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "6040:22:56",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6054:1:56",
                        "type": "",
                        "value": "1"
                      },
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "6057:4:56"
                      }
                    ],
                    "functionName": {
                      "name": "shr",
                      "nodeType": "YulIdentifier",
                      "src": "6050:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6050:12:56"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "6040:6:56"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6071:38:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "6101:4:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6107:1:56",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "6097:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6097:12:56"
                  },
                  "variables": [
                    {
                      "name": "outOfPlaceEncoding",
                      "nodeType": "YulTypedName",
                      "src": "6075:18:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6148:31:56",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "6150:27:56",
                        "value": {
                          "arguments": [
                            {
                              "name": "length",
                              "nodeType": "YulIdentifier",
                              "src": "6164:6:56"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6172:4:56",
                              "type": "",
                              "value": "0x7f"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "6160:3:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6160:17:56"
                        },
                        "variableNames": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "6150:6:56"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "outOfPlaceEncoding",
                        "nodeType": "YulIdentifier",
                        "src": "6128:18:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "6121:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6121:26:56"
                  },
                  "nodeType": "YulIf",
                  "src": "6118:61:56"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6238:111:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6259:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "6266:3:56",
                                  "type": "",
                                  "value": "224"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "6271:10:56",
                                  "type": "",
                                  "value": "0x4e487b71"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nodeType": "YulIdentifier",
                                "src": "6262:3:56"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "6262:20:56"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "6252:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6252:31:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6252:31:56"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6303:1:56",
                              "type": "",
                              "value": "4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6306:4:56",
                              "type": "",
                              "value": "0x22"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "6296:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6296:15:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6296:15:56"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6331:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6334:4:56",
                              "type": "",
                              "value": "0x24"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6324:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6324:15:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6324:15:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "outOfPlaceEncoding",
                        "nodeType": "YulIdentifier",
                        "src": "6194:18:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "6217:6:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6225:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "6214:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6214:14:56"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nodeType": "YulIdentifier",
                      "src": "6191:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6191:38:56"
                  },
                  "nodeType": "YulIf",
                  "src": "6188:161:56"
                }
              ]
            },
            "name": "extract_byte_array_length",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "data",
                "nodeType": "YulTypedName",
                "src": "6010:4:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "6019:6:56",
                "type": ""
              }
            ],
            "src": "5975:380:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6534:237:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6551:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6562:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6544:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6544:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6544:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6585:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6596:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6581:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6581:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6601:2:56",
                        "type": "",
                        "value": "47"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6574:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6574:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6574:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6624:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6635:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6620:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6620:18:56"
                      },
                      {
                        "hexValue": "416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e6365",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "6640:34:56",
                        "type": "",
                        "value": "AccessControl: can only renounce"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6613:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6613:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6613:62:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6695:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6706:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6691:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6691:18:56"
                      },
                      {
                        "hexValue": "20726f6c657320666f722073656c66",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "6711:17:56",
                        "type": "",
                        "value": " roles for self"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6684:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6684:45:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6684:45:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6738:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6750:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6761:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6746:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6746:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "6738:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6511:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "6525:4:56",
                "type": ""
              }
            ],
            "src": "6360:411:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6808:95:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6825:1:56",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6832:3:56",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6837:10:56",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "6828:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6828:20:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6818:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6818:31:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6818:31:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6865:1:56",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6868:4:56",
                        "type": "",
                        "value": "0x11"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6858:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6858:15:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6858:15:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6889:1:56",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6892:4:56",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "6882:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6882:15:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6882:15:56"
                }
              ]
            },
            "name": "panic_error_0x11",
            "nodeType": "YulFunctionDefinition",
            "src": "6776:127:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6956:80:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6983:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "6985:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6985:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6985:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "6972:1:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "6979:1:56"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "6975:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6975:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "6969:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6969:13:56"
                  },
                  "nodeType": "YulIf",
                  "src": "6966:39:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7014:16:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "7025:1:56"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "7028:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7021:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7021:9:56"
                  },
                  "variableNames": [
                    {
                      "name": "sum",
                      "nodeType": "YulIdentifier",
                      "src": "7014:3:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_add_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "6939:1:56",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "6942:1:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "sum",
                "nodeType": "YulTypedName",
                "src": "6948:3:56",
                "type": ""
              }
            ],
            "src": "6908:128:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7215:181:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7232:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7243:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7225:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7225:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7225:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7266:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7277:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7262:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7262:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7282:2:56",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7255:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7255:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7255:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7305:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7316:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7301:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7301:18:56"
                      },
                      {
                        "hexValue": "4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7321:33:56",
                        "type": "",
                        "value": "ERC20Votes: block not yet mined"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7294:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7294:61:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7294:61:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7364:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7376:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7387:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7372:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7372:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7364:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_06e5bbaaa109e1d058e1026fbdce9ec5e51f304d46ad524d922a17511e41fd0d__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7192:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7206:4:56",
                "type": ""
              }
            ],
            "src": "7041:355:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7575:297:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7592:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7603:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7585:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7585:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7585:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7626:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7637:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7622:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7622:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7642:2:56",
                        "type": "",
                        "value": "67"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7615:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7615:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7615:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7665:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7676:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7661:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7661:18:56"
                      },
                      {
                        "hexValue": "4552433230437573746f6d3a204e6577206361702073657420746f206265206c",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7681:34:56",
                        "type": "",
                        "value": "ERC20Custom: New cap set to be l"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7654:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7654:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7654:62:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7736:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7747:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7732:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7732:18:56"
                      },
                      {
                        "hexValue": "6f776572207468616e206f7220657175616c20746f20746f74616c2073757070",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7752:34:56",
                        "type": "",
                        "value": "ower than or equal to total supp"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7725:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7725:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7725:62:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7807:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7818:3:56",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7803:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7803:19:56"
                      },
                      {
                        "hexValue": "6c7921",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7824:5:56",
                        "type": "",
                        "value": "ly!"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7796:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7796:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7796:34:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7839:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7851:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7862:3:56",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7847:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7847:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7839:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_22ef5e9c4c349aa87b3e83f0339e03df37095dc3cc07c17e24dc945e43d5ab37__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7552:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7566:4:56",
                "type": ""
              }
            ],
            "src": "7401:471:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8051:244:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8068:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8079:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8061:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8061:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8061:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8102:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8113:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8098:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8098:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8118:2:56",
                        "type": "",
                        "value": "54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8091:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8091:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8091:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8141:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8152:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8137:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8137:18:56"
                      },
                      {
                        "hexValue": "4552433230437573746f6d3a20496e637265617365204361702076616c756520",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "8157:34:56",
                        "type": "",
                        "value": "ERC20Custom: Increase Cap value "
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8130:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8130:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8130:62:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8212:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8223:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8208:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8208:18:56"
                      },
                      {
                        "hexValue": "686173206e6f6e2d76616c696420302076616c756521",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "8228:24:56",
                        "type": "",
                        "value": "has non-valid 0 value!"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8201:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8201:52:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8201:52:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8262:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8274:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8285:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8270:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8270:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "8262:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_1428862e5120f395ab39fd1940722c6cdb9248bb0d6d89e27c01f56b229139dc__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8028:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "8042:4:56",
                "type": ""
              }
            ],
            "src": "7877:418:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8474:242:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8491:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8502:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8484:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8484:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8484:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8525:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8536:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8521:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8521:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8541:2:56",
                        "type": "",
                        "value": "52"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8514:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8514:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8514:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8564:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8575:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8560:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8560:18:56"
                      },
                      {
                        "hexValue": "4552433230437573746f6d3a204465637265617365204361702076616c756520",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "8580:34:56",
                        "type": "",
                        "value": "ERC20Custom: Decrease Cap value "
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8553:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8553:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8553:62:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8635:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8646:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8631:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8631:18:56"
                      },
                      {
                        "hexValue": "686173206e6f6e2d76616c69642076616c756521",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "8651:22:56",
                        "type": "",
                        "value": "has non-valid value!"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8624:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8624:50:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8624:50:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8683:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8695:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8706:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8691:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8691:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "8683:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_07f117695d85d13fd0c0c5515eaa75aff5be4f9e09310644c8f092ed028356c4__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8451:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "8465:4:56",
                "type": ""
              }
            ],
            "src": "8300:416:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8770:76:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8792:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "8794:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8794:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8794:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "8786:1:56"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "8789:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "8783:2:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8783:8:56"
                  },
                  "nodeType": "YulIf",
                  "src": "8780:34:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8823:17:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "8835:1:56"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "8838:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "8831:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8831:9:56"
                  },
                  "variableNames": [
                    {
                      "name": "diff",
                      "nodeType": "YulIdentifier",
                      "src": "8823:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_sub_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "8752:1:56",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "8755:1:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "diff",
                "nodeType": "YulTypedName",
                "src": "8761:4:56",
                "type": ""
              }
            ],
            "src": "8721:125:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8883:95:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8900:1:56",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8907:3:56",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8912:10:56",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "8903:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8903:20:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8893:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8893:31:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8893:31:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8940:1:56",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8943:4:56",
                        "type": "",
                        "value": "0x32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8933:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8933:15:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8933:15:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8964:1:56",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8967:4:56",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "8957:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8957:15:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8957:15:56"
                }
              ]
            },
            "name": "panic_error_0x32",
            "nodeType": "YulFunctionDefinition",
            "src": "8851:127:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9157:227:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9174:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9185:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9167:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9167:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9167:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9208:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9219:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9204:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9204:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9224:2:56",
                        "type": "",
                        "value": "37"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9197:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9197:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9197:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9247:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9258:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9243:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9243:18:56"
                      },
                      {
                        "hexValue": "45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "9263:34:56",
                        "type": "",
                        "value": "ERC20: decreased allowance below"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9236:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9236:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9236:62:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9318:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9329:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9314:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9314:18:56"
                      },
                      {
                        "hexValue": "207a65726f",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "9334:7:56",
                        "type": "",
                        "value": " zero"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9307:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9307:35:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9307:35:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9351:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9363:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9374:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "9359:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9359:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "9351:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9134:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "9148:4:56",
                "type": ""
              }
            ],
            "src": "8983:401:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9563:179:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9580:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9591:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9573:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9573:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9573:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9614:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9625:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9610:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9610:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9630:2:56",
                        "type": "",
                        "value": "29"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9603:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9603:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9603:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9653:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9664:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9649:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9649:18:56"
                      },
                      {
                        "hexValue": "4552433230566f7465733a207369676e61747572652065787069726564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "9669:31:56",
                        "type": "",
                        "value": "ERC20Votes: signature expired"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9642:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9642:59:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9642:59:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9710:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9722:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9733:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "9718:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9718:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "9710:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_136d0f69bc85a5c125b5cc368e2880ebdb3c89d4d9828f6476431c386ea60257__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9540:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "9554:4:56",
                "type": ""
              }
            ],
            "src": "9389:353:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9932:232:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "9942:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9954:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9965:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "9950:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9950:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "9942:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9985:9:56"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "9996:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9978:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9978:25:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9978:25:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10023:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10034:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10019:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10019:18:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "10043:6:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10059:3:56",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "10064:1:56",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "10055:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10055:11:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "10068:1:56",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "10051:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "10051:19:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "10039:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10039:32:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10012:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10012:60:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10012:60:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10092:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10103:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10088:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10088:18:56"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "10108:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10081:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10081:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10081:34:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10135:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10146:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10131:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10131:18:56"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "10151:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10124:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10124:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10124:34:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9877:9:56",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "9888:6:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "9896:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "9904:6:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "9912:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "9923:4:56",
                "type": ""
              }
            ],
            "src": "9747:417:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10343:175:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10360:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10371:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10353:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10353:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10353:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10394:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10405:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10390:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10390:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10410:2:56",
                        "type": "",
                        "value": "25"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10383:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10383:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10383:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10433:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10444:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10429:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10429:18:56"
                      },
                      {
                        "hexValue": "4552433230566f7465733a20696e76616c6964206e6f6e6365",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10449:27:56",
                        "type": "",
                        "value": "ERC20Votes: invalid nonce"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10422:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10422:55:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10422:55:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10486:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10498:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10509:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10494:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10494:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "10486:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_1a23b43d95073d55a7380117ca03cace60cd22fee15d5cb140d51e46236e6872__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10320:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10334:4:56",
                "type": ""
              }
            ],
            "src": "10169:349:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10697:179:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10714:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10725:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10707:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10707:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10707:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10748:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10759:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10744:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10744:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10764:2:56",
                        "type": "",
                        "value": "29"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10737:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10737:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10737:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10787:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10798:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10783:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10783:18:56"
                      },
                      {
                        "hexValue": "45524332305065726d69743a206578706972656420646561646c696e65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10803:31:56",
                        "type": "",
                        "value": "ERC20Permit: expired deadline"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10776:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10776:59:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10776:59:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10844:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10856:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10867:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10852:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10852:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "10844:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_3e89525a63fb9c966b61cf8f5305156de8420bc773a2b60828a2f32c3c5797bd__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10674:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10688:4:56",
                "type": ""
              }
            ],
            "src": "10523:353:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11122:350:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "11132:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11144:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11155:3:56",
                        "type": "",
                        "value": "192"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11140:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11140:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "11132:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11175:9:56"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "11186:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11168:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11168:25:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11168:25:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "11202:29:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11220:3:56",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11225:1:56",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "11216:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11216:11:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11229:1:56",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "11212:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11212:19:56"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "11206:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11251:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11262:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11247:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11247:18:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "11271:6:56"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "11279:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "11267:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11267:15:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11240:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11240:43:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11240:43:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11303:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11314:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11299:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11299:18:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "11323:6:56"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "11331:2:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "11319:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11319:15:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11292:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11292:43:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11292:43:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11355:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11366:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11351:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11351:18:56"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "11371:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11344:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11344:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11344:34:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11398:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11409:3:56",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11394:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11394:19:56"
                      },
                      {
                        "name": "value4",
                        "nodeType": "YulIdentifier",
                        "src": "11415:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11387:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11387:35:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11387:35:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11442:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11453:3:56",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11438:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11438:19:56"
                      },
                      {
                        "name": "value5",
                        "nodeType": "YulIdentifier",
                        "src": "11459:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11431:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11431:35:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11431:35:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "11051:9:56",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "11062:6:56",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "11070:6:56",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "11078:6:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "11086:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "11094:6:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "11102:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "11113:4:56",
                "type": ""
              }
            ],
            "src": "10881:591:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11651:180:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11668:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11679:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11661:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11661:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11661:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11702:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11713:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11698:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11698:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11718:2:56",
                        "type": "",
                        "value": "30"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11691:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11691:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11691:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11741:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11752:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11737:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11737:18:56"
                      },
                      {
                        "hexValue": "45524332305065726d69743a20696e76616c6964207369676e6174757265",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "11757:32:56",
                        "type": "",
                        "value": "ERC20Permit: invalid signature"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11730:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11730:60:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11730:60:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11799:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11811:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11822:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11807:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11807:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "11799:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_94ca1ab58dfda790a1782ffbb0c0a140ec51d4148dbeecc6c39e37b25ff4b124__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "11628:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "11642:4:56",
                "type": ""
              }
            ],
            "src": "11477:354:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12010:226:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12027:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12038:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12020:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12020:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12020:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12061:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12072:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12057:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12057:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12077:2:56",
                        "type": "",
                        "value": "36"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12050:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12050:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12050:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12100:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12111:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12096:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12096:18:56"
                      },
                      {
                        "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f20616464",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "12116:34:56",
                        "type": "",
                        "value": "ERC20: approve from the zero add"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12089:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12089:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12089:62:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12171:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12182:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12167:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12167:18:56"
                      },
                      {
                        "hexValue": "72657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "12187:6:56",
                        "type": "",
                        "value": "ress"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12160:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12160:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12160:34:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12203:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12215:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12226:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12211:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12211:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12203:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "11987:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12001:4:56",
                "type": ""
              }
            ],
            "src": "11836:400:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12415:224:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12432:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12443:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12425:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12425:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12425:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12466:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12477:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12462:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12462:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12482:2:56",
                        "type": "",
                        "value": "34"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12455:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12455:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12455:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12505:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12516:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12501:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12501:18:56"
                      },
                      {
                        "hexValue": "45524332303a20617070726f766520746f20746865207a65726f206164647265",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "12521:34:56",
                        "type": "",
                        "value": "ERC20: approve to the zero addre"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12494:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12494:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12494:62:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12576:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12587:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12572:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12572:18:56"
                      },
                      {
                        "hexValue": "7373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "12592:4:56",
                        "type": "",
                        "value": "ss"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12565:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12565:32:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12565:32:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12606:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12618:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12629:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12614:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12614:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12606:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12392:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12406:4:56",
                "type": ""
              }
            ],
            "src": "12241:398:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12818:179:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12835:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12846:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12828:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12828:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12828:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12869:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12880:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12865:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12865:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12885:2:56",
                        "type": "",
                        "value": "29"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12858:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12858:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12858:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12908:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12919:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12904:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12904:18:56"
                      },
                      {
                        "hexValue": "45524332303a20696e73756666696369656e7420616c6c6f77616e6365",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "12924:31:56",
                        "type": "",
                        "value": "ERC20: insufficient allowance"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12897:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12897:59:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12897:59:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12965:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12977:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12988:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12973:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12973:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12965:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12795:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12809:4:56",
                "type": ""
              }
            ],
            "src": "12644:353:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13176:227:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13193:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13204:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13186:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13186:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13186:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13227:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13238:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13223:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13223:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13243:2:56",
                        "type": "",
                        "value": "37"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13216:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13216:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13216:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13266:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13277:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13262:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13262:18:56"
                      },
                      {
                        "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f206164",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "13282:34:56",
                        "type": "",
                        "value": "ERC20: transfer from the zero ad"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13255:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13255:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13255:62:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13337:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13348:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13333:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13333:18:56"
                      },
                      {
                        "hexValue": "6472657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "13353:7:56",
                        "type": "",
                        "value": "dress"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13326:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13326:35:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13326:35:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13370:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13382:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13393:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13378:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13378:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13370:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13153:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13167:4:56",
                "type": ""
              }
            ],
            "src": "13002:401:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13582:225:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13599:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13610:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13592:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13592:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13592:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13633:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13644:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13629:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13629:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13649:2:56",
                        "type": "",
                        "value": "35"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13622:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13622:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13622:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13672:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13683:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13668:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13668:18:56"
                      },
                      {
                        "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "13688:34:56",
                        "type": "",
                        "value": "ERC20: transfer to the zero addr"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13661:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13661:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13661:62:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13743:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13754:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13739:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13739:18:56"
                      },
                      {
                        "hexValue": "657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "13759:5:56",
                        "type": "",
                        "value": "ess"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13732:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13732:33:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13732:33:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13774:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13786:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13797:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13782:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13782:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13774:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13559:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13573:4:56",
                "type": ""
              }
            ],
            "src": "13408:399:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13986:228:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14003:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14014:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13996:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13996:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13996:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14037:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14048:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14033:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14033:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14053:2:56",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14026:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14026:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14026:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14076:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14087:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14072:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14072:18:56"
                      },
                      {
                        "hexValue": "45524332303a207472616e7366657220616d6f756e7420657863656564732062",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "14092:34:56",
                        "type": "",
                        "value": "ERC20: transfer amount exceeds b"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14065:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14065:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14065:62:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14147:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14158:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14143:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14143:18:56"
                      },
                      {
                        "hexValue": "616c616e6365",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "14163:8:56",
                        "type": "",
                        "value": "alance"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14136:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14136:36:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14136:36:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14181:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14193:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14204:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14189:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14189:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14181:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13963:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13977:4:56",
                "type": ""
              }
            ],
            "src": "13812:402:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14608:397:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "14625:3:56"
                      },
                      {
                        "hexValue": "416363657373436f6e74726f6c3a206163636f756e7420",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "14630:25:56",
                        "type": "",
                        "value": "AccessControl: account "
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14618:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14618:38:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14618:38:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "14665:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "14685:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "14679:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14679:13:56"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "14669:6:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "14727:6:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14735:4:56",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14723:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14723:17:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "14746:3:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14751:2:56",
                            "type": "",
                            "value": "23"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14742:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14742:12:56"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "14756:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "14701:21:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14701:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14701:62:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "14772:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "14786:3:56"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "14791:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14782:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14782:16:56"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "14776:2:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "14818:2:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14822:2:56",
                            "type": "",
                            "value": "23"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14814:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14814:11:56"
                      },
                      {
                        "hexValue": "206973206d697373696e6720726f6c6520",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "14827:19:56",
                        "type": "",
                        "value": " is missing role "
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14807:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14807:40:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14807:40:56"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "14856:29:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "14878:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "14872:5:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14872:13:56"
                  },
                  "variables": [
                    {
                      "name": "length_1",
                      "nodeType": "YulTypedName",
                      "src": "14860:8:56",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "14920:6:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14928:4:56",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14916:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14916:17:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "14939:2:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14943:2:56",
                            "type": "",
                            "value": "40"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14935:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14935:11:56"
                      },
                      {
                        "name": "length_1",
                        "nodeType": "YulIdentifier",
                        "src": "14948:8:56"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "14894:21:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14894:63:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14894:63:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14966:33:56",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "14981:2:56"
                          },
                          {
                            "name": "length_1",
                            "nodeType": "YulIdentifier",
                            "src": "14985:8:56"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14977:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14977:17:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14996:2:56",
                        "type": "",
                        "value": "40"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14973:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14973:26:56"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "14966:3:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_stringliteral_da0d07ce4a2849fbfc4cb9d6f939e9bd93016c372ca4a5ff14fe06caf3d67874_t_string_memory_ptr_t_stringliteral_f986ce851518a691bccd44ea42a5a185d1b866ef6cb07984a09b81694d20ab69_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "14576:3:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "14581:6:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "14589:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "14600:3:56",
                "type": ""
              }
            ],
            "src": "14219:786:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15184:170:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15201:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15212:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15194:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15194:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15194:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15235:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15246:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15231:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15231:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15251:2:56",
                        "type": "",
                        "value": "20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15224:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15224:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15224:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15274:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15285:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15270:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15270:18:56"
                      },
                      {
                        "hexValue": "5061757361626c653a206e6f7420706175736564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "15290:22:56",
                        "type": "",
                        "value": "Pausable: not paused"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15263:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15263:50:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15263:50:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15322:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15334:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15345:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15330:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15330:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15322:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15161:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15175:4:56",
                "type": ""
              }
            ],
            "src": "15010:344:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15533:175:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15550:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15561:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15543:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15543:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15543:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15584:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15595:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15580:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15580:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15600:2:56",
                        "type": "",
                        "value": "25"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15573:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15573:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15573:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15623:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15634:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15619:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15619:18:56"
                      },
                      {
                        "hexValue": "45524332304361707065643a20636170206578636565646564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "15639:27:56",
                        "type": "",
                        "value": "ERC20Capped: cap exceeded"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15612:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15612:55:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15612:55:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15676:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15688:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15699:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15684:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15684:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15676:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_c0532a65ade852f12d67926b1625bbc98f7eb7c650703bf531fd4e07ded2c49f__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15510:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15524:4:56",
                "type": ""
              }
            ],
            "src": "15359:349:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15887:228:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15904:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15915:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15897:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15897:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15897:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15938:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15949:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15934:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15934:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15954:2:56",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15927:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15927:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15927:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15977:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15988:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15973:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15973:18:56"
                      },
                      {
                        "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2033",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "15993:34:56",
                        "type": "",
                        "value": "SafeCast: value doesn't fit in 3"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15966:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15966:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15966:62:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16048:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16059:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16044:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16044:18:56"
                      },
                      {
                        "hexValue": "322062697473",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "16064:8:56",
                        "type": "",
                        "value": "2 bits"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16037:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16037:36:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16037:36:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "16082:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16094:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16105:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16090:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16090:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16082:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15864:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15878:4:56",
                "type": ""
              }
            ],
            "src": "15713:402:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16294:166:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16311:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16322:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16304:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16304:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16304:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16345:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16356:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16341:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16341:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16361:2:56",
                        "type": "",
                        "value": "16"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16334:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16334:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16334:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16384:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16395:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16380:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16380:18:56"
                      },
                      {
                        "hexValue": "5061757361626c653a20706175736564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "16400:18:56",
                        "type": "",
                        "value": "Pausable: paused"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16373:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16373:46:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16373:46:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "16428:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16440:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16451:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16436:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16436:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16428:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "16271:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "16285:4:56",
                "type": ""
              }
            ],
            "src": "16120:340:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16517:116:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "16576:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "16578:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "16578:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "16578:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "x",
                                "nodeType": "YulIdentifier",
                                "src": "16548:1:56"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "16541:6:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "16541:9:56"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "16534:6:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16534:17:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "16556:1:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16567:1:56",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "16563:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16563:6:56"
                              },
                              {
                                "name": "x",
                                "nodeType": "YulIdentifier",
                                "src": "16571:1:56"
                              }
                            ],
                            "functionName": {
                              "name": "div",
                              "nodeType": "YulIdentifier",
                              "src": "16559:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "16559:14:56"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "16553:2:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16553:21:56"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "16530:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16530:45:56"
                  },
                  "nodeType": "YulIf",
                  "src": "16527:71:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "16607:20:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "16622:1:56"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "16625:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "mul",
                      "nodeType": "YulIdentifier",
                      "src": "16618:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16618:9:56"
                  },
                  "variableNames": [
                    {
                      "name": "product",
                      "nodeType": "YulIdentifier",
                      "src": "16607:7:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_mul_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "16496:1:56",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "16499:1:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "product",
                "nodeType": "YulTypedName",
                "src": "16505:7:56",
                "type": ""
              }
            ],
            "src": "16465:168:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16670:95:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16687:1:56",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16694:3:56",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16699:10:56",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "16690:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16690:20:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16680:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16680:31:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16680:31:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16727:1:56",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16730:4:56",
                        "type": "",
                        "value": "0x41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16720:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16720:15:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16720:15:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16751:1:56",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16754:4:56",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "16744:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16744:15:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16744:15:56"
                }
              ]
            },
            "name": "panic_error_0x41",
            "nodeType": "YulFunctionDefinition",
            "src": "16638:127:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16817:89:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "16844:22:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "16846:16:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "16846:18:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "16846:18:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "16837:5:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "16830:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16830:13:56"
                  },
                  "nodeType": "YulIf",
                  "src": "16827:39:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "16875:25:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "16886:5:56"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16897:1:56",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "16893:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16893:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16882:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16882:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "16875:3:56"
                    }
                  ]
                }
              ]
            },
            "name": "decrement_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "16799:5:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "16809:3:56",
                "type": ""
              }
            ],
            "src": "16770:136:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17085:182:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17102:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17113:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17095:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17095:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17095:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17136:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17147:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17132:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17132:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17152:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17125:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17125:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17125:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17175:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17186:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17171:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17171:18:56"
                      },
                      {
                        "hexValue": "537472696e67733a20686578206c656e67746820696e73756666696369656e74",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "17191:34:56",
                        "type": "",
                        "value": "Strings: hex length insufficient"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17164:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17164:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17164:62:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17235:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17247:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17258:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "17243:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17243:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "17235:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "17062:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "17076:4:56",
                "type": ""
              }
            ],
            "src": "16911:356:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17485:276:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "17495:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17507:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17518:3:56",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "17503:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17503:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "17495:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17538:9:56"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "17549:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17531:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17531:25:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17531:25:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17576:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17587:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17572:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17572:18:56"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "17592:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17565:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17565:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17565:34:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17619:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17630:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17615:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17615:18:56"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "17635:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17608:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17608:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17608:34:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17662:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17673:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17658:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17658:18:56"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "17678:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17651:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17651:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17651:34:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17705:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17716:3:56",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17701:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17701:19:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value4",
                            "nodeType": "YulIdentifier",
                            "src": "17726:6:56"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17742:3:56",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "17747:1:56",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "17738:3:56"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17738:11:56"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "17751:1:56",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "17734:3:56"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "17734:19:56"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "17722:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17722:32:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17694:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17694:61:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17694:61:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "17422:9:56",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "17433:6:56",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "17441:6:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "17449:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "17457:6:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "17465:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "17476:4:56",
                "type": ""
              }
            ],
            "src": "17272:489:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17812:171:56",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "17843:111:56",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "17864:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "17871:3:56",
                                  "type": "",
                                  "value": "224"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "17876:10:56",
                                  "type": "",
                                  "value": "0x4e487b71"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nodeType": "YulIdentifier",
                                "src": "17867:3:56"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "17867:20:56"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "17857:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17857:31:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "17857:31:56"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "17908:1:56",
                              "type": "",
                              "value": "4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "17911:4:56",
                              "type": "",
                              "value": "0x12"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "17901:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17901:15:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "17901:15:56"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "17936:1:56",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "17939:4:56",
                              "type": "",
                              "value": "0x24"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "17929:6:56"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17929:15:56"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "17929:15:56"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "17832:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "17825:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17825:9:56"
                  },
                  "nodeType": "YulIf",
                  "src": "17822:132:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17963:14:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "17972:1:56"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "17975:1:56"
                      }
                    ],
                    "functionName": {
                      "name": "div",
                      "nodeType": "YulIdentifier",
                      "src": "17968:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17968:9:56"
                  },
                  "variableNames": [
                    {
                      "name": "r",
                      "nodeType": "YulIdentifier",
                      "src": "17963:1:56"
                    }
                  ]
                }
              ]
            },
            "name": "checked_div_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "17797:1:56",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "17800:1:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "r",
                "nodeType": "YulTypedName",
                "src": "17806:1:56",
                "type": ""
              }
            ],
            "src": "17766:217:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18162:238:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18179:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18190:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18172:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18172:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18172:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18213:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18224:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18209:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18209:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18229:2:56",
                        "type": "",
                        "value": "48"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18202:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18202:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18202:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18252:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18263:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18248:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18248:18:56"
                      },
                      {
                        "hexValue": "4552433230566f7465733a20746f74616c20737570706c79207269736b73206f",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "18268:34:56",
                        "type": "",
                        "value": "ERC20Votes: total supply risks o"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18241:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18241:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18241:62:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18323:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18334:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18319:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18319:18:56"
                      },
                      {
                        "hexValue": "766572666c6f77696e6720766f746573",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "18339:18:56",
                        "type": "",
                        "value": "verflowing votes"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18312:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18312:46:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18312:46:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "18367:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18379:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18390:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "18375:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18375:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "18367:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_97859f657b3d95198b68f29ae96ee966779795bec3ef1e76700d2d39fefd7699__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "18139:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "18153:4:56",
                "type": ""
              }
            ],
            "src": "17988:412:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18534:119:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18544:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18556:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18567:2:56",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "18552:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18552:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "18544:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18586:9:56"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "18597:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18579:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18579:25:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18579:25:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18624:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18635:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18620:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18620:18:56"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "18640:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18613:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18613:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18613:34:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "18495:9:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "18506:6:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "18514:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "18525:4:56",
                "type": ""
              }
            ],
            "src": "18405:248:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18906:144:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "18923:3:56"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18932:3:56",
                            "type": "",
                            "value": "240"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18937:4:56",
                            "type": "",
                            "value": "6401"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "18928:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18928:14:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18916:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18916:27:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18916:27:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "18963:3:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18968:1:56",
                            "type": "",
                            "value": "2"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18959:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18959:11:56"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "18972:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18952:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18952:27:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18952:27:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "18999:3:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19004:2:56",
                            "type": "",
                            "value": "34"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18995:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18995:12:56"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "19009:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18988:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18988:28:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18988:28:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "19025:19:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "19036:3:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19041:2:56",
                        "type": "",
                        "value": "66"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "19032:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19032:12:56"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "19025:3:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "18874:3:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "18879:6:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "18887:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "18898:3:56",
                "type": ""
              }
            ],
            "src": "18658:392:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19236:217:56",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "19246:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19258:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19269:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "19254:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19254:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "19246:4:56"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19289:9:56"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "19300:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19282:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19282:25:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19282:25:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19327:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19338:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19323:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19323:18:56"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "19347:6:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19355:4:56",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "19343:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19343:17:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19316:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19316:45:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19316:45:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19381:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19392:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19377:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19377:18:56"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "19397:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19370:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19370:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19370:34:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19424:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19435:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19420:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19420:18:56"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "19440:6:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19413:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19413:34:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19413:34:56"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "19181:9:56",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "19192:6:56",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "19200:6:56",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "19208:6:56",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "19216:6:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "19227:4:56",
                "type": ""
              }
            ],
            "src": "19055:398:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19490:95:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19507:1:56",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19514:3:56",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19519:10:56",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "19510:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19510:20:56"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19500:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19500:31:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19500:31:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19547:1:56",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19550:4:56",
                        "type": "",
                        "value": "0x21"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19540:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19540:15:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19540:15:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19571:1:56",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19574:4:56",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "19564:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19564:15:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19564:15:56"
                }
              ]
            },
            "name": "panic_error_0x21",
            "nodeType": "YulFunctionDefinition",
            "src": "19458:127:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19764:174:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19781:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19792:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19774:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19774:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19774:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19815:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19826:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19811:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19811:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19831:2:56",
                        "type": "",
                        "value": "24"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19804:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19804:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19804:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "19854:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19865:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "19850:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19850:18:56"
                      },
                      {
                        "hexValue": "45434453413a20696e76616c6964207369676e6174757265",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "19870:26:56",
                        "type": "",
                        "value": "ECDSA: invalid signature"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "19843:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19843:54:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19843:54:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "19906:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "19918:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19929:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "19914:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19914:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "19906:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "19741:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "19755:4:56",
                "type": ""
              }
            ],
            "src": "19590:348:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20117:181:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "20134:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20145:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20127:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20127:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20127:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "20168:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20179:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20164:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20164:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20184:2:56",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20157:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20157:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20157:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "20207:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20218:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20203:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20203:18:56"
                      },
                      {
                        "hexValue": "45434453413a20696e76616c6964207369676e6174757265206c656e677468",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "20223:33:56",
                        "type": "",
                        "value": "ECDSA: invalid signature length"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20196:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20196:61:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20196:61:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "20266:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "20278:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20289:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "20274:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20274:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "20266:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "20094:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "20108:4:56",
                "type": ""
              }
            ],
            "src": "19943:355:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20477:224:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "20494:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20505:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20487:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20487:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20487:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "20528:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20539:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20524:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20524:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20544:2:56",
                        "type": "",
                        "value": "34"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20517:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20517:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20517:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "20567:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20578:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20563:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20563:18:56"
                      },
                      {
                        "hexValue": "45434453413a20696e76616c6964207369676e6174757265202773272076616c",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "20583:34:56",
                        "type": "",
                        "value": "ECDSA: invalid signature 's' val"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20556:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20556:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20556:62:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "20638:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20649:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20634:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20634:18:56"
                      },
                      {
                        "hexValue": "7565",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "20654:4:56",
                        "type": "",
                        "value": "ue"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20627:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20627:32:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20627:32:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "20668:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "20680:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20691:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "20676:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20676:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "20668:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "20454:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "20468:4:56",
                "type": ""
              }
            ],
            "src": "20303:398:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20880:224:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "20897:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20908:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20890:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20890:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20890:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "20931:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20942:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20927:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20927:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20947:2:56",
                        "type": "",
                        "value": "34"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20920:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20920:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20920:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "20970:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "20981:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20966:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20966:18:56"
                      },
                      {
                        "hexValue": "45434453413a20696e76616c6964207369676e6174757265202776272076616c",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "20986:34:56",
                        "type": "",
                        "value": "ECDSA: invalid signature 'v' val"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20959:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20959:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20959:62:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "21041:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21052:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "21037:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21037:18:56"
                      },
                      {
                        "hexValue": "7565",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "21057:4:56",
                        "type": "",
                        "value": "ue"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21030:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21030:32:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21030:32:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "21071:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "21083:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21094:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "21079:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21079:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "21071:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_8522ee1b53216f595394db8e80a64d9e7d9bd512c0811c18debe9f40858597e4__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "20857:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "20871:4:56",
                "type": ""
              }
            ],
            "src": "20706:398:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "21283:181:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "21300:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21311:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21293:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21293:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21293:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "21334:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21345:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "21330:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21330:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21350:2:56",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21323:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21323:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21323:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "21373:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21384:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "21369:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21369:18:56"
                      },
                      {
                        "hexValue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "21389:33:56",
                        "type": "",
                        "value": "ERC20: mint to the zero address"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21362:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21362:61:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21362:61:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "21432:26:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "21444:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21455:2:56",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "21440:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21440:18:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "21432:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "21260:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "21274:4:56",
                "type": ""
              }
            ],
            "src": "21109:355:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "21643:223:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "21660:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21671:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21653:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21653:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21653:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "21694:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21705:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "21690:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21690:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21710:2:56",
                        "type": "",
                        "value": "33"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21683:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21683:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21683:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "21733:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21744:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "21729:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21729:18:56"
                      },
                      {
                        "hexValue": "45524332303a206275726e2066726f6d20746865207a65726f20616464726573",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "21749:34:56",
                        "type": "",
                        "value": "ERC20: burn from the zero addres"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21722:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21722:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21722:62:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "21804:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21815:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "21800:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21800:18:56"
                      },
                      {
                        "hexValue": "73",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "21820:3:56",
                        "type": "",
                        "value": "s"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21793:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21793:31:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21793:31:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "21833:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "21845:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21856:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "21841:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21841:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "21833:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "21620:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "21634:4:56",
                "type": ""
              }
            ],
            "src": "21469:397:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "22045:224:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "22062:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "22073:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "22055:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22055:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "22055:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "22096:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "22107:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "22092:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "22092:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "22112:2:56",
                        "type": "",
                        "value": "34"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "22085:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22085:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "22085:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "22135:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "22146:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "22131:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "22131:18:56"
                      },
                      {
                        "hexValue": "45524332303a206275726e20616d6f756e7420657863656564732062616c616e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "22151:34:56",
                        "type": "",
                        "value": "ERC20: burn amount exceeds balan"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "22124:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22124:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "22124:62:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "22206:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "22217:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "22202:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "22202:18:56"
                      },
                      {
                        "hexValue": "6365",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "22222:4:56",
                        "type": "",
                        "value": "ce"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "22195:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22195:32:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "22195:32:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "22236:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "22248:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "22259:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "22244:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22244:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "22236:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "22022:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "22036:4:56",
                "type": ""
              }
            ],
            "src": "21871:398:56"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "22448:229:56",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "22465:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "22476:2:56",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "22458:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22458:21:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "22458:21:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "22499:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "22510:2:56",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "22495:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "22495:18:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "22515:2:56",
                        "type": "",
                        "value": "39"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "22488:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22488:30:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "22488:30:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "22538:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "22549:2:56",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "22534:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "22534:18:56"
                      },
                      {
                        "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2032",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "22554:34:56",
                        "type": "",
                        "value": "SafeCast: value doesn't fit in 2"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "22527:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22527:62:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "22527:62:56"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "22609:9:56"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "22620:2:56",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "22605:3:56"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "22605:18:56"
                      },
                      {
                        "hexValue": "32342062697473",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "22625:9:56",
                        "type": "",
                        "value": "24 bits"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "22598:6:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22598:37:56"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "22598:37:56"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "22644:27:56",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "22656:9:56"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "22667:3:56",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "22652:3:56"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22652:19:56"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "22644:4:56"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9d2acf551b2466898443b9bc3a403a4d86037386bc5a8960c1bbb0f204e69b79__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "22425:9:56",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "22439:4:56",
                "type": ""
              }
            ],
            "src": "22274:403:56"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, shl(224, 0xffffffff)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_bytes32t_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffff))\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := abi_decode_uint8(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_uint32(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let value := calldataload(add(headStart, 32))\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n        value1 := value\n    }\n    function abi_encode_tuple_t_struct$_Checkpoint_$2945_memory_ptr__to_t_struct$_Checkpoint_$2945_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(mload(value0), 0xffffffff))\n        mstore(add(headStart, 0x20), and(mload(add(value0, 0x20)), sub(shl(224, 1), 1)))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 47)\n        mstore(add(headStart, 64), \"AccessControl: can only renounce\")\n        mstore(add(headStart, 96), \" roles for self\")\n        tail := add(headStart, 128)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_06e5bbaaa109e1d058e1026fbdce9ec5e51f304d46ad524d922a17511e41fd0d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ERC20Votes: block not yet mined\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_22ef5e9c4c349aa87b3e83f0339e03df37095dc3cc07c17e24dc945e43d5ab37__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 67)\n        mstore(add(headStart, 64), \"ERC20Custom: New cap set to be l\")\n        mstore(add(headStart, 96), \"ower than or equal to total supp\")\n        mstore(add(headStart, 128), \"ly!\")\n        tail := add(headStart, 160)\n    }\n    function abi_encode_tuple_t_stringliteral_1428862e5120f395ab39fd1940722c6cdb9248bb0d6d89e27c01f56b229139dc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 54)\n        mstore(add(headStart, 64), \"ERC20Custom: Increase Cap value \")\n        mstore(add(headStart, 96), \"has non-valid 0 value!\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_07f117695d85d13fd0c0c5515eaa75aff5be4f9e09310644c8f092ed028356c4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 52)\n        mstore(add(headStart, 64), \"ERC20Custom: Decrease Cap value \")\n        mstore(add(headStart, 96), \"has non-valid value!\")\n        tail := add(headStart, 128)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: decreased allowance below\")\n        mstore(add(headStart, 96), \" zero\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_136d0f69bc85a5c125b5cc368e2880ebdb3c89d4d9828f6476431c386ea60257__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"ERC20Votes: signature expired\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_1a23b43d95073d55a7380117ca03cace60cd22fee15d5cb140d51e46236e6872__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"ERC20Votes: invalid nonce\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_3e89525a63fb9c966b61cf8f5305156de8420bc773a2b60828a2f32c3c5797bd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"ERC20Permit: expired deadline\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_t_stringliteral_94ca1ab58dfda790a1782ffbb0c0a140ec51d4148dbeecc6c39e37b25ff4b124__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 30)\n        mstore(add(headStart, 64), \"ERC20Permit: invalid signature\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"ERC20: approve from the zero add\")\n        mstore(add(headStart, 96), \"ress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: approve to the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"ERC20: insufficient allowance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: transfer from the zero ad\")\n        mstore(add(headStart, 96), \"dress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"ERC20: transfer to the zero addr\")\n        mstore(add(headStart, 96), \"ess\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"ERC20: transfer amount exceeds b\")\n        mstore(add(headStart, 96), \"alance\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_da0d07ce4a2849fbfc4cb9d6f939e9bd93016c372ca4a5ff14fe06caf3d67874_t_string_memory_ptr_t_stringliteral_f986ce851518a691bccd44ea42a5a185d1b866ef6cb07984a09b81694d20ab69_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, \"AccessControl: account \")\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), add(pos, 23), length)\n        let _1 := add(pos, length)\n        mstore(add(_1, 23), \" is missing role \")\n        let length_1 := mload(value1)\n        copy_memory_to_memory(add(value1, 0x20), add(_1, 40), length_1)\n        end := add(add(_1, length_1), 40)\n    }\n    function abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"Pausable: not paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c0532a65ade852f12d67926b1625bbc98f7eb7c650703bf531fd4e07ded2c49f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"ERC20Capped: cap exceeded\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 3\")\n        mstore(add(headStart, 96), \"2 bits\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Pausable: paused\")\n        tail := add(headStart, 96)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(not(0), x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function decrement_t_uint256(value) -> ret\n    {\n        if iszero(value) { panic_error_0x11() }\n        ret := add(value, not(0))\n    }\n    function abi_encode_tuple_t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Strings: hex length insufficient\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_97859f657b3d95198b68f29ae96ee966779795bec3ef1e76700d2d39fefd7699__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 48)\n        mstore(add(headStart, 64), \"ERC20Votes: total supply risks o\")\n        mstore(add(headStart, 96), \"verflowing votes\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, shl(240, 6401))\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature length\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature 's' val\")\n        mstore(add(headStart, 96), \"ue\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_8522ee1b53216f595394db8e80a64d9e7d9bd512c0811c18debe9f40858597e4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ECDSA: invalid signature 'v' val\")\n        mstore(add(headStart, 96), \"ue\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ERC20: mint to the zero address\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"ERC20: burn from the zero addres\")\n        mstore(add(headStart, 96), \"s\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: burn amount exceeds balan\")\n        mstore(add(headStart, 96), \"ce\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_9d2acf551b2466898443b9bc3a403a4d86037386bc5a8960c1bbb0f204e69b79__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 2\")\n        mstore(add(headStart, 96), \"24 bits\")\n        tail := add(headStart, 128)\n    }\n}",
      "id": 56,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "520:3082:50:-:0;;;1129:95:18;1076:148;;841:382:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;981:5;1495:4:18;2455:602:32;;;;;;;;;;;;;-1:-1:-1;;;2455:602:32;;;953:5:50;960:7;2052:5:13;2044;:13;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2067:17:13;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;981:7:5;:15;;-1:-1:-1;;981:15:5;;;-1:-1:-1;2541:22:32;;;;;;;2597:25;;;;;;;;;2778;;;;981:15:5;2813:31:32;;;2873:13;2854:32;;;;-1:-1:-1;3633:73:32;;2651:117;3633:73;;;2273:25:56;;;2314:18;;;2307:34;;;;-1:-1:-1;2357:18:56;;2350:34;;;;2400:18;;;;2393:34;;;;3700:4:32;2443:19:56;;;2436:61;;;3633:73:32;;;;;;;;;;2245:19:56;;;;3633:73:32;;;3623:84;;;;;;;2896:85;;2991:28;;;;3029:21;;-1:-1:-1;1006:14:50;998:48:::2;;;::::0;-1:-1:-1;;;998:48:50;;1866:2:56;998:48:50::2;::::0;::::2;1848:21:56::0;1905:2;1885:18;;;1878:30;1944:23;1924:18;;;1917:51;1985:18;;998:48:50::2;;;;;;;;1056:4;:17:::0;;;1084:42:::2;2072:4:1;1115:10:50;1084;:42::i;:::-;1136:35;716:24;1160:10;1136;:35::i;:::-;1181;784:24;1205:10;1181;:35::i;:::-;841:382:::0;;;520:3082;;6861:233:1;2995:4;3018:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;3018:29:1;;;;;;;;;;;;6939:149;;6982:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;6982:29:1;;;;;;;;;:36;;-1:-1:-1;;6982:36:1;7014:4;6982:36;;;7064:12;719:10:27;;640:96;7064:12:1;-1:-1:-1;;;;;7037:40:1;7055:7;-1:-1:-1;;;;;7037:40:1;7049:4;7037:40;;;;;;;;;;6939:149;6861:233;;:::o;520:3082:50:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;520:3082:50;;;-1:-1:-1;520:3082:50;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:127:56;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:885;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:56;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:56;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;730:3;725:2;720;712:6;708:15;704:24;701:33;698:53;;;747:1;744;737:12;698:53;769:1;760:10;;779:133;793:2;790:1;787:9;779:133;;;881:14;;;877:23;;871:30;850:14;;;846:23;;839:63;804:10;;;;779:133;;;930:2;927:1;924:9;921:80;;;989:1;984:2;979;971:6;967:15;963:24;956:35;921:80;1019:6;146:885;-1:-1:-1;;;;;;146:885:56:o;1036:623::-;1144:6;1152;1160;1213:2;1201:9;1192:7;1188:23;1184:32;1181:52;;;1229:1;1226;1219:12;1181:52;1256:16;;-1:-1:-1;;;;;1321:14:56;;;1318:34;;;1348:1;1345;1338:12;1318:34;1371:61;1424:7;1415:6;1404:9;1400:22;1371:61;:::i;:::-;1361:71;;1478:2;1467:9;1463:18;1457:25;1441:41;;1507:2;1497:8;1494:16;1491:36;;;1523:1;1520;1513:12;1491:36;;1546:63;1601:7;1590:8;1579:9;1575:24;1546:63;:::i;:::-;1536:73;;;1649:2;1638:9;1634:18;1628:25;1618:35;;1036:623;;;;;:::o;2508:380::-;2587:1;2583:12;;;;2630;;;2651:61;;2705:4;2697:6;2693:17;2683:27;;2651:61;2758:2;2750:6;2747:14;2727:18;2724:38;2721:161;;;2804:10;2799:3;2795:20;2792:1;2785:31;2839:4;2836:1;2829:15;2867:4;2864:1;2857:15;2721:161;;2508:380;;;:::o;:::-;520:3082:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "520:3082:50:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2620:202:1;;;;;;:::i;:::-;;:::i;:::-;;;470:14:56;;463:22;445:41;;433:2;418:18;2620:202:1;;;;;;;;2156:98:13;;;:::i;:::-;;;;;;;:::i;4433:197::-;;;;;;:::i;:::-;;:::i;3244:106::-;3331:12;;3244:106;;;1731:25:56;;;1719:2;1704:18;3244:106:13;1585:177:56;5192:286:13;;;;;;:::i;:::-;;:::i;4008:129:1:-;;;;;;:::i;:::-;4082:7;4108:12;;;:6;:12;;;;;:22;;;;4008:129;4387:145;;;;;;:::i;:::-;;:::i;:::-;;3093:91:13;;;3175:2;2868:36:56;;2856:2;2841:18;3093:91:13;2726:184:56;1302:81:50;1372:4;;1302:81;;2506:113:18;;;:::i;5404:214:1:-;;;;;;:::i;:::-;;:::i;5873:236:13:-;;;;;;:::i;:::-;;:::i;2825:265:16:-;;;;;;:::i;:::-;;:::i;2520:75:50:-;;;:::i;2601:105::-;;;;;;:::i;:::-;;:::i;578:89:15:-;;;;;;:::i;:::-;;:::i;1436:247:50:-;;;;;;:::i;:::-;;:::i;1741:283::-;;;;;;:::i;:::-;;:::i;2218:126:16:-;;;;;;:::i;:::-;-1:-1:-1;;;;;2318:19:16;;;2292:7;2318:19;;;:10;:19;;;;;;;;2218:126;;;;-1:-1:-1;;;;;3455:32:56;;;3437:51;;3425:2;3410:18;2218:126:16;3291:203:56;5248:112:16;;;;;;:::i;:::-;;:::i;1098:84:5:-;1168:7;;;;1098:84;;1981:149:16;;;;;;:::i;:::-;;:::i;:::-;;;3673:10:56;3661:23;;;3643:42;;3631:2;3616:18;1981:149:16;3499:192:56;3408:125:13;;;;;;:::i;:::-;-1:-1:-1;;;;;3508:18:13;3482:7;3508:18;;;;;;;;;;;;3408:125;2082:355:50;;;;;;:::i;:::-;;:::i;973:161:15:-;;;;;;:::i;:::-;;:::i;2256:126:18:-;;;;;;:::i;:::-;;:::i;2443:71:50:-;;;:::i;3369:256:16:-;;;;;;:::i;:::-;;:::i;2909:145:1:-;;;;;;:::i;:::-;;:::i;2367:102:13:-;;;:::i;2423:209:16:-;;;;;;:::i;:::-;;:::i;2027:49:1:-;;2072:4;2027:49;;6596:429:13;;;;;;:::i;:::-;;:::i;3729:189::-;;;;;;:::i;:::-;;:::i;5437:574:16:-;;;;;;:::i;:::-;;:::i;1569:626:18:-;;;;;;:::i;:::-;;:::i;746:62:50:-;;784:24;746:62;;4766:147:1;;;;;;:::i;:::-;;:::i;3976:149:13:-;;;;;;:::i;:::-;-1:-1:-1;;;;;4091:18:13;;;4065:7;4091:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3976:149;678:62:50;;716:24;678:62;;1758:148:16;;;;;;:::i;:::-;;:::i;:::-;;;;5848:13:56;;5863:10;5844:30;5826:49;;5935:4;5923:17;;;5917:24;-1:-1:-1;;;;;5913:50:56;5891:20;;;5884:80;;;;5799:18;1758:148:16;5624:346:56;2620:202:1;2705:4;-1:-1:-1;;;;;;2728:47:1;;-1:-1:-1;;;2728:47:1;;:87;;-1:-1:-1;;;;;;;;;;937:40:33;;;2779:36:1;2721:94;2620:202;-1:-1:-1;;2620:202:1:o;2156:98:13:-;2210:13;2242:5;2235:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2156:98;:::o;4433:197::-;4516:4;719:10:27;4570:32:13;719:10:27;4586:7:13;4595:6;4570:8;:32::i;:::-;-1:-1:-1;4619:4:13;;4433:197;-1:-1:-1;;;4433:197:13:o;5192:286::-;5319:4;719:10:27;5375:38:13;5391:4;719:10:27;5406:6:13;5375:15;:38::i;:::-;5423:27;5433:4;5439:2;5443:6;5423:9;:27::i;:::-;-1:-1:-1;5467:4:13;;5192:286;-1:-1:-1;;;;5192:286:13:o;4387:145:1:-;4082:7;4108:12;;;:6;:12;;;;;:22;;;2505:30;2516:4;719:10:27;2505::1;:30::i;:::-;4500:25:::1;4511:4;4517:7;4500:10;:25::i;:::-;4387:145:::0;;;:::o;2506:113:18:-;2566:7;2592:20;:18;:20::i;:::-;2585:27;;2506:113;:::o;5404:214:1:-;-1:-1:-1;;;;;5499:23:1;;719:10:27;5499:23:1;5491:83;;;;-1:-1:-1;;;5491:83:1;;6562:2:56;5491:83:1;;;6544:21:56;6601:2;6581:18;;;6574:30;6640:34;6620:18;;;6613:62;-1:-1:-1;;;6691:18:56;;;6684:45;6746:19;;5491:83:1;;;;;;;;;5585:26;5597:4;5603:7;5585:11;:26::i;:::-;5404:214;;:::o;5873:236:13:-;719:10:27;5961:4:13;6040:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;6040:27:13;;;;;;;;;;5961:4;;719:10:27;6015:66:13;;719:10:27;;6040:27:13;;:40;;6070:10;;6040:40;:::i;:::-;6015:8;:66::i;2825:265:16:-;2923:7;2964:12;2950:11;:26;2942:70;;;;-1:-1:-1;;;2942:70:16;;7243:2:56;2942:70:16;;;7225:21:56;7282:2;7262:18;;;7255:30;7321:33;7301:18;;;7294:61;7372:18;;2942:70:16;7041:355:56;2942:70:16;-1:-1:-1;;;;;3048:21:16;;;;;;:12;:21;;;;;3029:54;;3071:11;3029:18;:54::i;:::-;3022:61;2825:265;-1:-1:-1;;;2825:265:16:o;2520:75:50:-;716:24;2505:30:1;716:24:50;719:10:27;2505::1;:30::i;:::-;2578:10:50::1;:8;:10::i;:::-;2520:75:::0;:::o;2601:105::-;784:24;2505:30:1;784:24:50;719:10:27;2505::1;:30::i;:::-;2682:17:50::1;2688:2;2692:6;2682:5;:17::i;578:89:15:-:0;633:27;719:10:27;653:6:15;633:5;:27::i;1436:247:50:-;2072:4:1;2505:30;2072:4;719:10:27;2505::1;:30::i;:::-;3331:12:13;;1536:7:50::1;:23;1515:137;;;::::0;-1:-1:-1;;;1515:137:50;;7603:2:56;1515:137:50::1;::::0;::::1;7585:21:56::0;7642:2;7622:18;;;7615:30;7681:34;7661:18;;;7654:62;7752:34;7732:18;;;7725:62;-1:-1:-1;;;7803:19:56;;;7796:34;7847:19;;1515:137:50::1;7401:471:56::0;1515:137:50::1;-1:-1:-1::0;1662:4:50::1;:14:::0;1436:247::o;1741:283::-;2072:4:1;2505:30;2072:4;719:10:27;2505::1;:30::i;:::-;1886:1:50::1;1871:12;:16;1850:117;;;::::0;-1:-1:-1;;;1850:117:50;;8079:2:56;1850:117:50::1;::::0;::::1;8061:21:56::0;8118:2;8098:18;;;8091:30;8157:34;8137:18;;;8130:62;-1:-1:-1;;;8208:18:56;;;8201:52;8270:19;;1850:117:50::1;7877:418:56::0;1850:117:50::1;1984:33;1997:5;1372:4:::0;;;1302:81;1997:5:::1;2004:12;1984;:33::i;:::-;1977:4;:40:::0;-1:-1:-1;;1741:283:50:o;5248:112:16:-;5319:34;719:10:27;5343:9:16;5319;:34::i;1981:149::-;-1:-1:-1;;;;;2094:21:16;;2051:6;2094:21;;;:12;:21;;;;;:28;2076:47;;:17;:47::i;2082:355:50:-;2072:4:1;2505:30;2072:4;719:10:27;2505::1;:30::i;:::-;2228:1:50::1;2213:12;:16;2212:90;;;;;2267:34;2280:5;1372:4:::0;;;1302:81;2280:5:::1;3331:12:13::0;;2267::50::1;:34::i;:::-;2251:12;:50;;2212:90;2191:189;;;::::0;-1:-1:-1;;;2191:189:50;;8502:2:56;2191:189:50::1;::::0;::::1;8484:21:56::0;8541:2;8521:18;;;8514:30;8580:34;8560:18;;;8553:62;-1:-1:-1;;;8631:18:56;;;8624:50;8691:19;;2191:189:50::1;8300:416:56::0;2191:189:50::1;2397:33;2410:5;1372:4:::0;;;1302:81;2410:5:::1;2417:12;2397;:33::i;973:161:15:-:0;1049:46;1065:7;719:10:27;1088:6:15;1049:15;:46::i;:::-;1105:22;1111:7;1120:6;1105:5;:22::i;2256:126:18:-;-1:-1:-1;;;;;2351:14:18;;2325:7;2351:14;;;:7;:14;;;;;918::28;2351:24:18;827:112:28;2443:71:50;716:24;2505:30:1;716:24:50;719:10:27;2505::1;:30::i;:::-;2499:8:50::1;:6;:8::i;3369:256:16:-:0;3456:7;3497:12;3483:11;:26;3475:70;;;;-1:-1:-1;;;3475:70:16;;7243:2:56;3475:70:16;;;7225:21:56;7282:2;7262:18;;;7255:30;7321:33;7301:18;;;7294:61;7372:18;;3475:70:16;7041:355:56;3475:70:16;3562:56;3581:23;3606:11;3562:18;:56::i;2909:145:1:-;2995:4;3018:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;3018:29:1;;;;;;;;;;;;;;;2909:145::o;2367:102:13:-;2423:13;2455:7;2448:14;;;;;:::i;2423:209:16:-;-1:-1:-1;;;;;2529:21:16;;2496:7;2529:21;;;:12;:21;;;;;:28;2574:8;;:51;;-1:-1:-1;;;;;2589:21:16;;;;;;:12;:21;;;;;2611:7;2617:1;2611:3;:7;:::i;:::-;2589:30;;;;;;;;:::i;:::-;;;;;;;;;;:36;;;;-1:-1:-1;;;;;2589:36:16;2574:51;;;2585:1;2574:51;-1:-1:-1;;;;;2567:58:16;;2423:209;-1:-1:-1;;;2423:209:16:o;6596:429:13:-;719:10:27;6689:4:13;6770:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;6770:27:13;;;;;;;;;;6689:4;;719:10:27;6815:35:13;;;;6807:85;;;;-1:-1:-1;;;6807:85:13;;9185:2:56;6807:85:13;;;9167:21:56;9224:2;9204:18;;;9197:30;9263:34;9243:18;;;9236:62;-1:-1:-1;;;9314:18:56;;;9307:35;9359:19;;6807:85:13;8983:401:56;6807:85:13;6926:60;6935:5;6942:7;6970:15;6951:16;:34;6926:8;:60::i;3729:189::-;3808:4;719:10:27;3862:28:13;719:10:27;3879:2:13;3883:6;3862:9;:28::i;5437:574:16:-;5656:6;5637:15;:25;;5629:67;;;;-1:-1:-1;;;5629:67:16;;9591:2:56;5629:67:16;;;9573:21:56;9630:2;9610:18;;;9603:30;9669:31;9649:18;;;9642:59;9718:18;;5629:67:16;9389:353:56;5629:67:16;5777:58;;;1447:71;5777:58;;;9978:25:56;-1:-1:-1;;;;;10039:32:56;;10019:18;;;10012:60;;;;10088:18;;;10081:34;;;10131:18;;;10124:34;;;5706:14:16;;5723:169;;5750:87;;9950:19:56;;5777:58:16;;;;;;;;;;;;5767:69;;;;;;5750:16;:87::i;:::-;5851:1;5866;5881;5723:13;:169::i;:::-;5706:186;;5919:17;5929:6;5919:9;:17::i;:::-;5910:5;:26;5902:64;;;;-1:-1:-1;;;5902:64:16;;10371:2:56;5902:64:16;;;10353:21:56;10410:2;10390:18;;;10383:30;10449:27;10429:18;;;10422:55;10494:18;;5902:64:16;10169:349:56;5902:64:16;5976:28;5986:6;5994:9;5976;:28::i;:::-;5619:392;5437:574;;;;;;:::o;1569:626:18:-;1804:8;1785:15;:27;;1777:69;;;;-1:-1:-1;;;1777:69:18;;10725:2:56;1777:69:18;;;10707:21:56;10764:2;10744:18;;;10737:30;10803:31;10783:18;;;10776:59;10852:18;;1777:69:18;10523:353:56;1777:69:18;1857:18;1899:16;1917:5;1924:7;1933:5;1940:16;1950:5;1940:9;:16::i;:::-;1888:79;;;;;;11168:25:56;;;;-1:-1:-1;;;;;11267:15:56;;;11247:18;;;11240:43;11319:15;;;;11299:18;;;11292:43;11351:18;;;11344:34;11394:19;;;11387:35;11438:19;;;11431:35;;;11140:19;;1888:79:18;;;;;;;;;;;;1878:90;;;;;;1857:111;;1979:12;1994:28;2011:10;1994:16;:28::i;:::-;1979:43;;2033:14;2050:28;2064:4;2070:1;2073;2076;2050:13;:28::i;:::-;2033:45;;2106:5;-1:-1:-1;;;;;2096:15:18;:6;-1:-1:-1;;;;;2096:15:18;;2088:58;;;;-1:-1:-1;;;2088:58:18;;11679:2:56;2088:58:18;;;11661:21:56;11718:2;11698:18;;;11691:30;11757:32;11737:18;;;11730:60;11807:18;;2088:58:18;11477:354:56;2088:58:18;2157:31;2166:5;2173:7;2182:5;2157:8;:31::i;:::-;1767:428;;;1569:626;;;;;;;:::o;4766:147:1:-;4082:7;4108:12;;;:6;:12;;;;;:22;;;2505:30;2516:4;719:10:27;2505::1;:30::i;:::-;4880:26:::1;4892:4;4898:7;4880:11;:26::i;1758:148:16:-:0;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;1873:21:16;;;;;;:12;:21;;;;;:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1866:33;;;;;;;;;1873:26;;1866:33;;;;;;;;;-1:-1:-1;;;;;1866:33:16;;;;;;;;;1758:148;-1:-1:-1;;;1758:148:16:o;10123:370:13:-;-1:-1:-1;;;;;10254:19:13;;10246:68;;;;-1:-1:-1;;;10246:68:13;;12038:2:56;10246:68:13;;;12020:21:56;12077:2;12057:18;;;12050:30;12116:34;12096:18;;;12089:62;-1:-1:-1;;;12167:18:56;;;12160:34;12211:19;;10246:68:13;11836:400:56;10246:68:13;-1:-1:-1;;;;;10332:21:13;;10324:68;;;;-1:-1:-1;;;10324:68:13;;12443:2:56;10324:68:13;;;12425:21:56;12482:2;12462:18;;;12455:30;12521:34;12501:18;;;12494:62;-1:-1:-1;;;12572:18:56;;;12565:32;12614:19;;10324:68:13;12241:398:56;10324:68:13;-1:-1:-1;;;;;10403:18:13;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10454:32;;1731:25:56;;;10454:32:13;;1704:18:56;10454:32:13;;;;;;;10123:370;;;:::o;10770:441::-;-1:-1:-1;;;;;4091:18:13;;;10900:24;4091:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;10966:37:13;;10962:243;;11047:6;11027:16;:26;;11019:68;;;;-1:-1:-1;;;11019:68:13;;12846:2:56;11019:68:13;;;12828:21:56;12885:2;12865:18;;;12858:30;12924:31;12904:18;;;12897:59;12973:18;;11019:68:13;12644:353:56;11019:68:13;11129:51;11138:5;11145:7;11173:6;11154:16;:25;11129:8;:51::i;:::-;10890:321;10770:441;;;:::o;7488:651::-;-1:-1:-1;;;;;7614:18:13;;7606:68;;;;-1:-1:-1;;;7606:68:13;;13204:2:56;7606:68:13;;;13186:21:56;13243:2;13223:18;;;13216:30;13282:34;13262:18;;;13255:62;-1:-1:-1;;;13333:18:56;;;13326:35;13378:19;;7606:68:13;13002:401:56;7606:68:13;-1:-1:-1;;;;;7692:16:13;;7684:64;;;;-1:-1:-1;;;7684:64:13;;13610:2:56;7684:64:13;;;13592:21:56;13649:2;13629:18;;;13622:30;13688:34;13668:18;;;13661:62;-1:-1:-1;;;13739:18:56;;;13732:33;13782:19;;7684:64:13;13408:399:56;7684:64:13;7759:38;7780:4;7786:2;7790:6;7759:20;:38::i;:::-;-1:-1:-1;;;;;7830:15:13;;7808:19;7830:15;;;;;;;;;;;7863:21;;;;7855:72;;;;-1:-1:-1;;;7855:72:13;;14014:2:56;7855:72:13;;;13996:21:56;14053:2;14033:18;;;14026:30;14092:34;14072:18;;;14065:62;-1:-1:-1;;;14143:18:56;;;14136:36;14189:19;;7855:72:13;13812:402:56;7855:72:13;-1:-1:-1;;;;;7961:15:13;;;:9;:15;;;;;;;;;;;7979:20;;;7961:38;;8019:13;;;;;;;;:23;;7993:6;;7961:9;8019:23;;7993:6;;8019:23;:::i;:::-;;;;;;;;8073:2;-1:-1:-1;;;;;8058:26:13;8067:4;-1:-1:-1;;;;;8058:26:13;;8077:6;8058:26;;;;1731:25:56;;1719:2;1704:18;;1585:177;8058:26:13;;;;;;;;8095:37;8115:4;8121:2;8125:6;8095:19;:37::i;3335:492:1:-;3423:22;3431:4;3437:7;3423;:22::i;:::-;3418:403;;3606:41;3634:7;-1:-1:-1;;;;;3606:41:1;3644:2;3606:19;:41::i;:::-;3718:38;3746:4;3753:2;3718:19;:38::i;:::-;3513:265;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3513:265:1;;;;;;;;;;-1:-1:-1;;;3461:349:1;;;;;;;:::i;6861:233::-;6944:22;6952:4;6958:7;6944;:22::i;:::-;6939:149;;6982:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;6982:29:1;;;;;;;;;:36;;-1:-1:-1;;6982:36:1;7014:4;6982:36;;;7064:12;719:10:27;;640:96;7064:12:1;-1:-1:-1;;;;;7037:40:1;7055:7;-1:-1:-1;;;;;7037:40:1;7049:4;7037:40;;;;;;;;;;6861:233;;:::o;3143:308:32:-;3196:7;3227:4;-1:-1:-1;;;;;3236:12:32;3219:29;;:66;;;;;3269:16;3252:13;:33;3219:66;3215:230;;;-1:-1:-1;3308:24:32;;3143:308::o;3215:230::-;-1:-1:-1;3633:73:32;;;3392:10;3633:73;;;;17531:25:56;;;;3404:12:32;17572:18:56;;;17565:34;3418:15:32;17615:18:56;;;17608:34;3677:13:32;17658:18:56;;;17651:34;3700:4:32;17701:19:56;;;;17694:61;;;;3633:73:32;;;;;;;;;;17503:19:56;;;;3633:73:32;;;3623:84;;;;;;2506:113:18:o;7219:234:1:-;7302:22;7310:4;7316:7;7302;:22::i;:::-;7298:149;;;7372:5;7340:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;7340:29:1;;;;;;;;;;:37;;-1:-1:-1;;7340:37:1;;;7396:40;719:10:27;;7340:12:1;;7396:40;;7372:5;7396:40;7219:234;;:::o;3709:1458:16:-;4830:12;;3808:7;;;4877:229;4890:4;4884:3;:10;4877:229;;;4910:11;4924:23;4937:3;4942:4;4924:12;:23::i;:::-;4910:37;;4988:11;4965:5;4971:3;4965:10;;;;;;;;:::i;:::-;;;;;;;;;;:20;;;:34;4961:135;;;5026:3;5019:10;;4961:135;;;5074:7;:3;5080:1;5074:7;:::i;:::-;5068:13;;4961:135;4896:210;4877:229;;;5123:9;;:37;;5139:5;5145:8;5152:1;5145:4;:8;:::i;:::-;5139:15;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;-1:-1:-1;;;;;5139:21:16;5123:37;;;5135:1;5123:37;-1:-1:-1;;;;;5116:44:16;;3709:1458;-1:-1:-1;;;;;3709:1458:16:o;2110:117:5:-;1168:7;;;;1669:41;;;;-1:-1:-1;;;1669:41:5;;15212:2:56;1669:41:5;;;15194:21:56;15251:2;15231:18;;;15224:30;-1:-1:-1;;;15270:18:56;;;15263:50;15330:18;;1669:41:5;15010:344:56;1669:41:5;2168:7:::1;:15:::0;;-1:-1:-1;;2168:15:5::1;::::0;;2198:22:::1;719:10:27::0;2207:12:5::1;2198:22;::::0;-1:-1:-1;;;;;3455:32:56;;;3437:51;;3425:2;3410:18;2198:22:5::1;;;;;;;2110:117::o:0;3185:259:50:-;1372:4;;3338:6;3316:19;3331:12:13;;;3244:106;3316:19:50;:28;;;;:::i;:::-;:37;;3295:109;;;;-1:-1:-1;;;3295:109:50;;15561:2:56;3295:109:50;;;15543:21:56;15600:2;15580:18;;;15573:30;15639:27;15619:18;;;15612:55;15684:18;;3295:109:50;15359:349:56;3295:109:50;3414:23;3426:2;3430:6;3414:11;:23::i;3450:150::-;3565:28;3577:7;3586:6;3565:11;:28::i;2741:96:37:-;2799:7;2825:5;2829:1;2825;:5;:::i;7413:380:16:-;-1:-1:-1;;;;;2318:19:16;;;7497:23;2318:19;;;:10;:19;;;;;;;;;;3508:18:13;;;;;;;7610:21:16;;;;:33;;;-1:-1:-1;;;;;;7610:33:16;;;;;;;7659:54;;2318:19;;;;;3508:18:13;;7610:33:16;;2318:19;;;7659:54;;7497:23;7659:54;7724:62;7741:15;7758:9;7769:16;7724;:62::i;3045:187:36:-;3101:6;3136:16;3127:25;;;3119:76;;;;-1:-1:-1;;;3119:76:36;;15915:2:56;3119:76:36;;;15897:21:56;15954:2;15934:18;;;15927:30;15993:34;15973:18;;;15966:62;-1:-1:-1;;;16044:18:56;;;16037:36;16090:19;;3119:76:36;15713:402:56;3119:76:36;-1:-1:-1;3219:5:36;3045:187::o;3108:96:37:-;3166:7;3192:5;3196:1;3192;:5;:::i;1863:115:5:-;1168:7;;;;1411:9;1403:38;;;;-1:-1:-1;;;1403:38:5;;16322:2:56;1403:38:5;;;16304:21:56;16361:2;16341:18;;;16334:30;-1:-1:-1;;;16380:18:56;;;16373:46;16436:18;;1403:38:5;16120:340:56;1403:38:5;1922:7:::1;:14:::0;;-1:-1:-1;;1922:14:5::1;1932:4;1922:14;::::0;;1951:20:::1;1958:12;719:10:27::0;;640:96;4339:165:32;4416:7;4442:55;4464:20;:18;:20::i;:::-;4486:10;9226:57:30;;-1:-1:-1;;;9226:57:30;;;18916:27:56;18959:11;;;18952:27;;;18995:12;;;18988:28;;;9190:7:30;;19032:12:56;;9226:57:30;;;;;;;;;;;;9216:68;;;;;;9209:75;;9097:194;;;;;7452:270;7575:7;7595:17;7614:18;7636:25;7647:4;7653:1;7656;7659;7636:10;:25::i;:::-;7594:67;;;;7671:18;7683:5;7671:11;:18::i;:::-;-1:-1:-1;7706:9:30;7452:270;-1:-1:-1;;;;;7452:270:30:o;2750:203:18:-;-1:-1:-1;;;;;2870:14:18;;2810:15;2870:14;;;:7;:14;;;;;918::28;;1050:1;1032:19;;;;918:14;2929:17:18;2827:126;2750:203;;;:::o;2712:195:50:-;1168:7:5;;;;1411:9;1403:38;;;;-1:-1:-1;;;1403:38:5;;16322:2:56;1403:38:5;;;16304:21:56;16361:2;16341:18;;;16334:30;-1:-1:-1;;;16380:18:56;;;16373:46;16436:18;;1403:38:5;16120:340:56;2981:198:50;3129:43;3155:4;3161:2;3165:6;3129:25;:43::i;1588:441:29:-;1663:13;1688:19;1720:10;1724:6;1720:1;:10;:::i;:::-;:14;;1733:1;1720:14;:::i;:::-;1710:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1710:25:29;;1688:47;;-1:-1:-1;;;1745:6:29;1752:1;1745:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1745:15:29;;;;;;;;;-1:-1:-1;;;1770:6:29;1777:1;1770:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1770:15:29;;;;;;;;-1:-1:-1;1800:9:29;1812:10;1816:6;1812:1;:10;:::i;:::-;:14;;1825:1;1812:14;:::i;:::-;1800:26;;1795:132;1832:1;1828;:5;1795:132;;;-1:-1:-1;;;1879:5:29;1887:3;1879:11;1866:25;;;;;;;:::i;:::-;;;;1854:6;1861:1;1854:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;1854:37:29;;;;;;;;-1:-1:-1;1915:1:29;1905:11;;;;;1835:3;;;:::i;:::-;;;1795:132;;;-1:-1:-1;1944:10:29;;1936:55;;;;-1:-1:-1;;;1936:55:29;;17113:2:56;1936:55:29;;;17095:21:56;;;17132:18;;;17125:30;17191:34;17171:18;;;17164:62;17243:18;;1936:55:29;16911:356:56;678:153:35;740:7;813:11;823:1;814:5;;;813:11;:::i;:::-;803:21;;804:5;;;803:21;:::i;6305:285:16:-;6389:28;6401:7;6410:6;6389:11;:28::i;:::-;3331:12:13;;-1:-1:-1;;;;;;6435:29:16;6427:90;;;;-1:-1:-1;;;6427:90:16;;18190:2:56;6427:90:16;;;18172:21:56;18229:2;18209:18;;;18202:30;18268:34;18248:18;;;18241:62;-1:-1:-1;;;18319:18:56;;;18312:46;18375:19;;6427:90:16;17988:412:56;6427:90:16;6528:55;6545:23;6570:4;6576:6;6528:16;:55::i;6679:190::-;6763:28;6775:7;6784:6;6763:11;:28::i;:::-;6802:60;6819:23;6844:9;6855:6;6802:16;:60::i;7799:627::-;7926:3;-1:-1:-1;;;;;7919:10:16;:3;-1:-1:-1;;;;;7919:10:16;;;:24;;;;;7942:1;7933:6;:10;7919:24;7915:505;;;-1:-1:-1;;;;;7963:17:16;;;7959:221;;-1:-1:-1;;;;;8058:17:16;;8001;8058;;;:12;:17;;;;;8001;;8041:54;;8077:9;8088:6;8041:16;:54::i;:::-;8000:95;;;;8139:3;-1:-1:-1;;;;;8118:47:16;;8144:9;8155;8118:47;;;;;;18579:25:56;;;18635:2;18620:18;;18613:34;18567:2;18552:18;;18405:248;8118:47:16;;;;;;;;7982:198;;7959:221;-1:-1:-1;;;;;8198:17:16;;;8194:216;;-1:-1:-1;;;;;8293:17:16;;8236;8293;;;:12;:17;;;;;8236;;8276:49;;8312:4;8318:6;8276:16;:49::i;:::-;8235:90;;;;8369:3;-1:-1:-1;;;;;8348:47:16;;8374:9;8385;8348:47;;;;;;18579:25:56;;;18635:2;18620:18;;18613:34;18567:2;18552:18;;18405:248;8348:47:16;;;;;;;;8217:193;;7799:627;;;:::o;5716:1603:30:-;5842:7;;6766:66;6753:79;;6749:161;;;-1:-1:-1;6864:1:30;;-1:-1:-1;6868:30:30;6848:51;;6749:161;6923:1;:7;;6928:2;6923:7;;:18;;;;;6934:1;:7;;6939:2;6934:7;;6923:18;6919:100;;;-1:-1:-1;6973:1:30;;-1:-1:-1;6977:30:30;6957:51;;6919:100;7130:24;;;7113:14;7130:24;;;;;;;;;19282:25:56;;;19355:4;19343:17;;19323:18;;;19316:45;;;;19377:18;;;19370:34;;;19420:18;;;19413:34;;;7130:24:30;;19254:19:56;;7130:24:30;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7130:24:30;;-1:-1:-1;;7130:24:30;;;-1:-1:-1;;;;;;;7168:20:30;;7164:101;;7220:1;7224:29;7204:50;;;;;;;7164:101;7283:6;-1:-1:-1;7291:20:30;;-1:-1:-1;5716:1603:30;;;;;;;;:::o;548:631::-;625:20;616:5;:29;;;;;;;;:::i;:::-;;612:561;;;548:631;:::o;612:561::-;721:29;712:5;:38;;;;;;;;:::i;:::-;;708:465;;;766:34;;-1:-1:-1;;;766:34:30;;19792:2:56;766:34:30;;;19774:21:56;19831:2;19811:18;;;19804:30;19870:26;19850:18;;;19843:54;19914:18;;766:34:30;19590:348:56;708:465:30;830:35;821:5;:44;;;;;;;;:::i;:::-;;817:356;;;881:41;;-1:-1:-1;;;881:41:30;;20145:2:56;881:41:30;;;20127:21:56;20184:2;20164:18;;;20157:30;20223:33;20203:18;;;20196:61;20274:18;;881:41:30;19943:355:56;817:356:30;952:30;943:5;:39;;;;;;;;:::i;:::-;;939:234;;;998:44;;-1:-1:-1;;;998:44:30;;20505:2:56;998:44:30;;;20487:21:56;20544:2;20524:18;;;20517:30;20583:34;20563:18;;;20556:62;-1:-1:-1;;;20634:18:56;;;20627:32;20676:19;;998:44:30;20303:398:56;939:234:30;1072:30;1063:5;:39;;;;;;;;:::i;:::-;;1059:114;;;1118:44;;-1:-1:-1;;;1118:44:30;;20908:2:56;1118:44:30;;;20890:21:56;20947:2;20927:18;;;20920:30;20986:34;20966:18;;;20959:62;-1:-1:-1;;;21037:18:56;;;21030:32;21079:19;;1118:44:30;20706:398:56;7002:254:16;-1:-1:-1;;;;;2318:19:16;;;2292:7;2318:19;;;:10;:19;;;;;;;;;;;;;;;7193:56;;2318:19;;;;;7242:6;7193:16;:56::i;8415:389:13:-;-1:-1:-1;;;;;8498:21:13;;8490:65;;;;-1:-1:-1;;;8490:65:13;;21311:2:56;8490:65:13;;;21293:21:56;21350:2;21330:18;;;21323:30;21389:33;21369:18;;;21362:61;21440:18;;8490:65:13;21109:355:56;8490:65:13;8566:49;8595:1;8599:7;8608:6;8566:20;:49::i;:::-;8642:6;8626:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;8658:18:13;;:9;:18;;;;;;;;;;:28;;8680:6;;8658:9;:28;;8680:6;;8658:28;:::i;:::-;;;;-1:-1:-1;;8701:37:13;;1731:25:56;;;-1:-1:-1;;;;;8701:37:13;;;8718:1;;8701:37;;1719:2:56;1704:18;8701:37:13;;;;;;;8749:48;8777:1;8781:7;8790:6;8749:19;:48::i;8432:631:16:-;8664:12;;8602:17;;;;8698:8;;:35;;8713:5;8719:7;8725:1;8719:3;:7;:::i;:::-;8713:14;;;;;;;;:::i;:::-;;;;;;;;;;:20;;;;-1:-1:-1;;;;;8713:20:16;8698:35;;;8709:1;8698:35;-1:-1:-1;;;;;8686:47:16;;;8755:20;8758:9;8769:5;8755:2;:20;;:::i;:::-;8743:32;;8796:1;8790:3;:7;:51;;;;-1:-1:-1;8829:12:16;8801:5;8807:7;8813:1;8807:3;:7;:::i;:::-;8801:14;;;;;;;;:::i;:::-;;;;;;;;;;:24;;;:40;8790:51;8786:271;;;8880:29;8899:9;8880:18;:29::i;:::-;8857:5;8863:7;8869:1;8863:3;:7;:::i;:::-;8857:14;;;;;;;;:::i;:::-;;;;;;;;:20;;;:52;;;;;-1:-1:-1;;;;;8857:52:16;;;;;-1:-1:-1;;;;;8857:52:16;;;;;;8786:271;;;8940:5;8951:94;;;;;;;;8974:31;8992:12;8974:17;:31::i;:::-;8951:94;;;;;;9014:29;9033:9;9014:18;:29::i;:::-;-1:-1:-1;;;;;8951:94:16;;;;;;8940:106;;;;;;;-1:-1:-1;8940:106:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8786:271;8640:423;8432:631;;;;;;:::o;9124:576:13:-;-1:-1:-1;;;;;9207:21:13;;9199:67;;;;-1:-1:-1;;;9199:67:13;;21671:2:56;9199:67:13;;;21653:21:56;21710:2;21690:18;;;21683:30;21749:34;21729:18;;;21722:62;-1:-1:-1;;;21800:18:56;;;21793:31;21841:19;;9199:67:13;21469:397:56;9199:67:13;9277:49;9298:7;9315:1;9319:6;9277:20;:49::i;:::-;-1:-1:-1;;;;;9362:18:13;;9337:22;9362:18;;;;;;;;;;;9398:24;;;;9390:71;;;;-1:-1:-1;;;9390:71:13;;22073:2:56;9390:71:13;;;22055:21:56;22112:2;22092:18;;;22085:30;22151:34;22131:18;;;22124:62;-1:-1:-1;;;22202:18:56;;;22195:32;22244:19;;9390:71:13;21871:398:56;9390:71:13;-1:-1:-1;;;;;9495:18:13;;:9;:18;;;;;;;;;;9516:23;;;9495:44;;9559:12;:22;;9533:6;;9495:9;9559:22;;9533:6;;9559:22;:::i;:::-;;;;-1:-1:-1;;9597:37:13;;1731:25:56;;;9623:1:13;;-1:-1:-1;;;;;9597:37:13;;;;;1719:2:56;1704:18;9597:37:13;;;;;;;9645:48;9665:7;9682:1;9686:6;9645:19;:48::i;1135:192:36:-;1192:7;-1:-1:-1;;;;;1219:26:36;;;1211:78;;;;-1:-1:-1;;;1211:78:36;;22476:2:56;1211:78:36;;;22458:21:56;22515:2;22495:18;;;22488:30;22554:34;22534:18;;;22527:62;-1:-1:-1;;;22605:18:56;;;22598:37;22652:19;;1211:78:36;22274:403:56;14:286;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:56;;209:43;;199:71;;266:1;263;256:12;497:258;569:1;579:113;593:6;590:1;587:13;579:113;;;669:11;;;663:18;650:11;;;643:39;615:2;608:10;579:113;;;710:6;707:1;704:13;701:48;;;-1:-1:-1;;745:1:56;727:16;;720:27;497:258::o;760:383::-;909:2;898:9;891:21;872:4;941:6;935:13;984:6;979:2;968:9;964:18;957:34;1000:66;1059:6;1054:2;1043:9;1039:18;1034:2;1026:6;1022:15;1000:66;:::i;:::-;1127:2;1106:15;-1:-1:-1;;1102:29:56;1087:45;;;;1134:2;1083:54;;760:383;-1:-1:-1;;760:383:56:o;1148:173::-;1216:20;;-1:-1:-1;;;;;1265:31:56;;1255:42;;1245:70;;1311:1;1308;1301:12;1245:70;1148:173;;;:::o;1326:254::-;1394:6;1402;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;1494:29;1513:9;1494:29;:::i;:::-;1484:39;1570:2;1555:18;;;;1542:32;;-1:-1:-1;;;1326:254:56:o;1767:328::-;1844:6;1852;1860;1913:2;1901:9;1892:7;1888:23;1884:32;1881:52;;;1929:1;1926;1919:12;1881:52;1952:29;1971:9;1952:29;:::i;:::-;1942:39;;2000:38;2034:2;2023:9;2019:18;2000:38;:::i;:::-;1990:48;;2085:2;2074:9;2070:18;2057:32;2047:42;;1767:328;;;;;:::o;2100:180::-;2159:6;2212:2;2200:9;2191:7;2187:23;2183:32;2180:52;;;2228:1;2225;2218:12;2180:52;-1:-1:-1;2251:23:56;;2100:180;-1:-1:-1;2100:180:56:o;2467:254::-;2535:6;2543;2596:2;2584:9;2575:7;2571:23;2567:32;2564:52;;;2612:1;2609;2602:12;2564:52;2648:9;2635:23;2625:33;;2677:38;2711:2;2700:9;2696:18;2677:38;:::i;:::-;2667:48;;2467:254;;;;;:::o;3100:186::-;3159:6;3212:2;3200:9;3191:7;3187:23;3183:32;3180:52;;;3228:1;3225;3218:12;3180:52;3251:29;3270:9;3251:29;:::i;3696:156::-;3762:20;;3822:4;3811:16;;3801:27;;3791:55;;3842:1;3839;3832:12;3857:531;3959:6;3967;3975;3983;3991;3999;4052:3;4040:9;4031:7;4027:23;4023:33;4020:53;;;4069:1;4066;4059:12;4020:53;4092:29;4111:9;4092:29;:::i;:::-;4082:39;;4168:2;4157:9;4153:18;4140:32;4130:42;;4219:2;4208:9;4204:18;4191:32;4181:42;;4242:36;4274:2;4263:9;4259:18;4242:36;:::i;:::-;4232:46;;4325:3;4314:9;4310:19;4297:33;4287:43;;4377:3;4366:9;4362:19;4349:33;4339:43;;3857:531;;;;;;;;:::o;4393:606::-;4504:6;4512;4520;4528;4536;4544;4552;4605:3;4593:9;4584:7;4580:23;4576:33;4573:53;;;4622:1;4619;4612:12;4573:53;4645:29;4664:9;4645:29;:::i;:::-;4635:39;;4693:38;4727:2;4716:9;4712:18;4693:38;:::i;:::-;4683:48;;4778:2;4767:9;4763:18;4750:32;4740:42;;4829:2;4818:9;4814:18;4801:32;4791:42;;4852:37;4884:3;4873:9;4869:19;4852:37;:::i;:::-;4842:47;;4936:3;4925:9;4921:19;4908:33;4898:43;;4988:3;4977:9;4973:19;4960:33;4950:43;;4393:606;;;;;;;;;;:::o;5004:260::-;5072:6;5080;5133:2;5121:9;5112:7;5108:23;5104:32;5101:52;;;5149:1;5146;5139:12;5101:52;5172:29;5191:9;5172:29;:::i;:::-;5162:39;;5220:38;5254:2;5243:9;5239:18;5220:38;:::i;5269:350::-;5336:6;5344;5397:2;5385:9;5376:7;5372:23;5368:32;5365:52;;;5413:1;5410;5403:12;5365:52;5436:29;5455:9;5436:29;:::i;:::-;5426:39;;5515:2;5504:9;5500:18;5487:32;5559:10;5552:5;5548:22;5541:5;5538:33;5528:61;;5585:1;5582;5575:12;5528:61;5608:5;5598:15;;;5269:350;;;;;:::o;5975:380::-;6054:1;6050:12;;;;6097;;;6118:61;;6172:4;6164:6;6160:17;6150:27;;6118:61;6225:2;6217:6;6214:14;6194:18;6191:38;6188:161;;;6271:10;6266:3;6262:20;6259:1;6252:31;6306:4;6303:1;6296:15;6334:4;6331:1;6324:15;6776:127;6837:10;6832:3;6828:20;6825:1;6818:31;6868:4;6865:1;6858:15;6892:4;6889:1;6882:15;6908:128;6948:3;6979:1;6975:6;6972:1;6969:13;6966:39;;;6985:18;;:::i;:::-;-1:-1:-1;7021:9:56;;6908:128::o;8721:125::-;8761:4;8789:1;8786;8783:8;8780:34;;;8794:18;;:::i;:::-;-1:-1:-1;8831:9:56;;8721:125::o;8851:127::-;8912:10;8907:3;8903:20;8900:1;8893:31;8943:4;8940:1;8933:15;8967:4;8964:1;8957:15;14219:786;14630:25;14625:3;14618:38;14600:3;14685:6;14679:13;14701:62;14756:6;14751:2;14746:3;14742:12;14735:4;14727:6;14723:17;14701:62;:::i;:::-;-1:-1:-1;;;14822:2:56;14782:16;;;14814:11;;;14807:40;14872:13;;14894:63;14872:13;14943:2;14935:11;;14928:4;14916:17;;14894:63;:::i;:::-;14977:17;14996:2;14973:26;;14219:786;-1:-1:-1;;;;14219:786:56:o;16465:168::-;16505:7;16571:1;16567;16563:6;16559:14;16556:1;16553:21;16548:1;16541:9;16534:17;16530:45;16527:71;;;16578:18;;:::i;:::-;-1:-1:-1;16618:9:56;;16465:168::o;16638:127::-;16699:10;16694:3;16690:20;16687:1;16680:31;16730:4;16727:1;16720:15;16754:4;16751:1;16744:15;16770:136;16809:3;16837:5;16827:39;;16846:18;;:::i;:::-;-1:-1:-1;;;16882:18:56;;16770:136::o;17766:217::-;17806:1;17832;17822:132;;17876:10;17871:3;17867:20;17864:1;17857:31;17911:4;17908:1;17901:15;17939:4;17936:1;17929:15;17822:132;-1:-1:-1;17968:9:56;;17766:217::o;19458:127::-;19519:10;19514:3;19510:20;19507:1;19500:31;19550:4;19547:1;19540:15;19574:4;19571:1;19564:15",
  "source": "// SPDX-License-Identifier: AGPL-3.0\n\npragma solidity ^0.8.11;\n\nimport \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol\";\nimport \"@openzeppelin/contracts/security/Pausable.sol\";\nimport \"@openzeppelin/contracts/access/AccessControl.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol\";\nimport \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\n\ncontract ERC20Custom is\n    ERC20,\n    ERC20Burnable,\n    Pausable,\n    AccessControl,\n    ERC20Permit,\n    ERC20Votes\n{\n    using SafeMath for uint256;\n\n    bytes32 public constant PAUSER_ROLE = keccak256(\"PAUSER_ROLE\");\n    bytes32 public constant MINTER_ROLE = keccak256(\"MINTER_ROLE\");\n    uint256 private _cap;\n\n    constructor(\n        string memory _name,\n        string memory _symbol,\n        uint256 _capSupply\n    ) ERC20(_name, _symbol) ERC20Permit(_name) {\n        require(_capSupply > 0, \"ERC20Capped: cap is 0\");\n        _cap = _capSupply;\n\n        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);\n        _grantRole(PAUSER_ROLE, msg.sender);\n        _grantRole(MINTER_ROLE, msg.sender);\n    }\n\n    /**\n     * @dev Returns the cap on the token's total supply.\n     */\n    function cap() public view virtual returns (uint256) {\n        return _cap;\n    }\n\n    /**\n     * @dev Set new cap supply\n     */\n    function setCap(uint256 _newCap) public onlyRole(DEFAULT_ADMIN_ROLE) {\n        require(\n            _newCap > totalSupply(),\n            \"ERC20Custom: New cap set to be lower than or equal to total supply!\"\n        );\n        _cap = _newCap;\n    }\n\n    /**\n     * @dev Increase the cap supply\n     */\n    function increaseCap(uint256 _increaseCap)\n        public\n        onlyRole(DEFAULT_ADMIN_ROLE)\n    {\n        require(\n            _increaseCap > 0,\n            \"ERC20Custom: Increase Cap value has non-valid 0 value!\"\n        );\n        _cap = SafeMath.add(cap(), _increaseCap);\n    }\n\n    /**\n     * @dev Decrease the cap supply\n     */\n    function decreaseCap(uint256 _decreaseCap)\n        public\n        onlyRole(DEFAULT_ADMIN_ROLE)\n    {\n        require(\n            (_decreaseCap > 0) &&\n                (_decreaseCap <= SafeMath.sub(cap(), totalSupply())),\n            \"ERC20Custom: Decrease Cap value has non-valid value!\"\n        );\n        _cap = SafeMath.sub(cap(), _decreaseCap);\n    }\n\n    function pause() public onlyRole(PAUSER_ROLE) {\n        _pause();\n    }\n\n    function unpause() public onlyRole(PAUSER_ROLE) {\n        _unpause();\n    }\n\n    function mint(address to, uint256 amount) public onlyRole(MINTER_ROLE) {\n        _mint(to, amount);\n    }\n\n    function _beforeTokenTransfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal override whenNotPaused {\n        super._beforeTokenTransfer(from, to, amount);\n    }\n\n    // The following functions are overrides required by Solidity.\n\n    function _afterTokenTransfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal override(ERC20, ERC20Votes) {\n        super._afterTokenTransfer(from, to, amount);\n    }\n\n    function _mint(address to, uint256 amount)\n        internal\n        override(ERC20, ERC20Votes)\n    {\n        require(\n            ERC20.totalSupply() + amount <= cap(),\n            \"ERC20Capped: cap exceeded\"\n        );\n        super._mint(to, amount);\n    }\n\n    function _burn(address account, uint256 amount)\n        internal\n        override(ERC20, ERC20Votes)\n    {\n        super._burn(account, amount);\n    }\n}\n",
  "sourcePath": "/Users/yosephks/Documents/GitHub/alpsfinance-smart-contracts/contracts/token/ERC20Custom.sol",
  "ast": {
    "absolutePath": "project:/contracts/token/ERC20Custom.sol",
    "exportedSymbols": {
      "AccessControl": [
        354
      ],
      "Context": [
        5297
      ],
      "Counters": [
        5371
      ],
      "ECDSA": [
        5981
      ],
      "EIP712": [
        6228
      ],
      "ERC165": [
        6252
      ],
      "ERC20": [
        2806
      ],
      "ERC20Burnable": [
        2928
      ],
      "ERC20Custom": [
        9497
      ],
      "ERC20Permit": [
        3759
      ],
      "ERC20Votes": [
        3565
      ],
      "IAccessControl": [
        427
      ],
      "IERC165": [
        6264
      ],
      "IERC20": [
        2884
      ],
      "IERC20Metadata": [
        3590
      ],
      "IERC20Permit": [
        3795
      ],
      "IVotes": [
        610
      ],
      "Math": [
        6352
      ],
      "Pausable": [
        702
      ],
      "SafeCast": [
        6745
      ],
      "SafeMath": [
        7057
      ],
      "Strings": [
        5574
      ]
    },
    "id": 9498,
    "license": "AGPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 9195,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "38:24:50"
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
        "id": 9196,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9498,
        "sourceUnit": 2807,
        "src": "64:55:50",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol",
        "file": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol",
        "id": 9197,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9498,
        "sourceUnit": 2929,
        "src": "120:74:50",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/security/Pausable.sol",
        "file": "@openzeppelin/contracts/security/Pausable.sol",
        "id": 9198,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9498,
        "sourceUnit": 703,
        "src": "195:55:50",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/access/AccessControl.sol",
        "file": "@openzeppelin/contracts/access/AccessControl.sol",
        "id": 9199,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9498,
        "sourceUnit": 355,
        "src": "251:58:50",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol",
        "file": "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol",
        "id": 9200,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9498,
        "sourceUnit": 3760,
        "src": "310:78:50",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol",
        "file": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol",
        "id": 9201,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9498,
        "sourceUnit": 3566,
        "src": "389:71:50",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/utils/math/SafeMath.sol",
        "id": 9202,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9498,
        "sourceUnit": 7058,
        "src": "461:57:50",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 9203,
              "name": "ERC20",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2806,
              "src": "548:5:50"
            },
            "id": 9204,
            "nodeType": "InheritanceSpecifier",
            "src": "548:5:50"
          },
          {
            "baseName": {
              "id": 9205,
              "name": "ERC20Burnable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2928,
              "src": "559:13:50"
            },
            "id": 9206,
            "nodeType": "InheritanceSpecifier",
            "src": "559:13:50"
          },
          {
            "baseName": {
              "id": 9207,
              "name": "Pausable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 702,
              "src": "578:8:50"
            },
            "id": 9208,
            "nodeType": "InheritanceSpecifier",
            "src": "578:8:50"
          },
          {
            "baseName": {
              "id": 9209,
              "name": "AccessControl",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 354,
              "src": "592:13:50"
            },
            "id": 9210,
            "nodeType": "InheritanceSpecifier",
            "src": "592:13:50"
          },
          {
            "baseName": {
              "id": 9211,
              "name": "ERC20Permit",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 3759,
              "src": "611:11:50"
            },
            "id": 9212,
            "nodeType": "InheritanceSpecifier",
            "src": "611:11:50"
          },
          {
            "baseName": {
              "id": 9213,
              "name": "ERC20Votes",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 3565,
              "src": "628:10:50"
            },
            "id": 9214,
            "nodeType": "InheritanceSpecifier",
            "src": "628:10:50"
          }
        ],
        "canonicalName": "ERC20Custom",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 9497,
        "linearizedBaseContracts": [
          9497,
          3565,
          3759,
          6228,
          3795,
          354,
          6252,
          6264,
          427,
          702,
          2928,
          2806,
          3590,
          2884,
          5297,
          610
        ],
        "name": "ERC20Custom",
        "nameLocation": "529:11:50",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 9217,
            "libraryName": {
              "id": 9215,
              "name": "SafeMath",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 7057,
              "src": "651:8:50"
            },
            "nodeType": "UsingForDirective",
            "src": "645:27:50",
            "typeName": {
              "id": 9216,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "664:7:50",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "functionSelector": "e63ab1e9",
            "id": 9222,
            "mutability": "constant",
            "name": "PAUSER_ROLE",
            "nameLocation": "702:11:50",
            "nodeType": "VariableDeclaration",
            "scope": 9497,
            "src": "678:62:50",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 9218,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "678:7:50",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "5041555345525f524f4c45",
                  "id": 9220,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "726:13:50",
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a",
                    "typeString": "literal_string \"PAUSER_ROLE\""
                  },
                  "value": "PAUSER_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a",
                    "typeString": "literal_string \"PAUSER_ROLE\""
                  }
                ],
                "id": 9219,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 4294967288,
                "src": "716:9:50",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 9221,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "716:24:50",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "functionSelector": "d5391393",
            "id": 9227,
            "mutability": "constant",
            "name": "MINTER_ROLE",
            "nameLocation": "770:11:50",
            "nodeType": "VariableDeclaration",
            "scope": 9497,
            "src": "746:62:50",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 9223,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "746:7:50",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "4d494e5445525f524f4c45",
                  "id": 9225,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "794:13:50",
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6",
                    "typeString": "literal_string \"MINTER_ROLE\""
                  },
                  "value": "MINTER_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6",
                    "typeString": "literal_string \"MINTER_ROLE\""
                  }
                ],
                "id": 9224,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 4294967288,
                "src": "784:9:50",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 9226,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "784:24:50",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 9229,
            "mutability": "mutable",
            "name": "_cap",
            "nameLocation": "830:4:50",
            "nodeType": "VariableDeclaration",
            "scope": 9497,
            "src": "814:20:50",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 9228,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "814:7:50",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 9274,
              "nodeType": "Block",
              "src": "988:235:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 9248,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 9246,
                          "name": "_capSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9235,
                          "src": "1006:10:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 9247,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1019:1:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1006:14:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332304361707065643a206361702069732030",
                        "id": 9249,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1022:23:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_073f3193e2b9c9099973df1adea790edf33994edcd3f57beae2487f3c5bd8828",
                          "typeString": "literal_string \"ERC20Capped: cap is 0\""
                        },
                        "value": "ERC20Capped: cap is 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_073f3193e2b9c9099973df1adea790edf33994edcd3f57beae2487f3c5bd8828",
                          "typeString": "literal_string \"ERC20Capped: cap is 0\""
                        }
                      ],
                      "id": 9245,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "998:7:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9250,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "998:48:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9251,
                  "nodeType": "ExpressionStatement",
                  "src": "998:48:50"
                },
                {
                  "expression": {
                    "id": 9254,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 9252,
                      "name": "_cap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9229,
                      "src": "1056:4:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 9253,
                      "name": "_capSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9235,
                      "src": "1063:10:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1056:17:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9255,
                  "nodeType": "ExpressionStatement",
                  "src": "1056:17:50"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9257,
                        "name": "DEFAULT_ADMIN_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 73,
                        "src": "1095:18:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "expression": {
                          "id": 9258,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "1115:3:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 9259,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1115:10:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 9256,
                      "name": "_grantRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 322,
                      "src": "1084:10:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 9260,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1084:42:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9261,
                  "nodeType": "ExpressionStatement",
                  "src": "1084:42:50"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9263,
                        "name": "PAUSER_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9222,
                        "src": "1147:11:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "expression": {
                          "id": 9264,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "1160:3:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 9265,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1160:10:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 9262,
                      "name": "_grantRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 322,
                      "src": "1136:10:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 9266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1136:35:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9267,
                  "nodeType": "ExpressionStatement",
                  "src": "1136:35:50"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9269,
                        "name": "MINTER_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9227,
                        "src": "1192:11:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "expression": {
                          "id": 9270,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "1205:3:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 9271,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1205:10:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 9268,
                      "name": "_grantRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 322,
                      "src": "1181:10:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 9272,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1181:35:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9273,
                  "nodeType": "ExpressionStatement",
                  "src": "1181:35:50"
                }
              ]
            },
            "id": 9275,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 9238,
                    "name": "_name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9231,
                    "src": "953:5:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "id": 9239,
                    "name": "_symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9233,
                    "src": "960:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  }
                ],
                "id": 9240,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 9237,
                  "name": "ERC20",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2806,
                  "src": "947:5:50"
                },
                "nodeType": "ModifierInvocation",
                "src": "947:21:50"
              },
              {
                "arguments": [
                  {
                    "id": 9242,
                    "name": "_name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9231,
                    "src": "981:5:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  }
                ],
                "id": 9243,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 9241,
                  "name": "ERC20Permit",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3759,
                  "src": "969:11:50"
                },
                "nodeType": "ModifierInvocation",
                "src": "969:18:50"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9236,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9231,
                  "mutability": "mutable",
                  "name": "_name",
                  "nameLocation": "876:5:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9275,
                  "src": "862:19:50",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 9230,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "862:6:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9233,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nameLocation": "905:7:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9275,
                  "src": "891:21:50",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 9232,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "891:6:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9235,
                  "mutability": "mutable",
                  "name": "_capSupply",
                  "nameLocation": "930:10:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9275,
                  "src": "922:18:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9234,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "922:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "852:94:50"
            },
            "returnParameters": {
              "id": 9244,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "988:0:50"
            },
            "scope": 9497,
            "src": "841:382:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9283,
              "nodeType": "Block",
              "src": "1355:28:50",
              "statements": [
                {
                  "expression": {
                    "id": 9281,
                    "name": "_cap",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9229,
                    "src": "1372:4:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9280,
                  "id": 9282,
                  "nodeType": "Return",
                  "src": "1365:11:50"
                }
              ]
            },
            "documentation": {
              "id": 9276,
              "nodeType": "StructuredDocumentation",
              "src": "1229:68:50",
              "text": " @dev Returns the cap on the token's total supply."
            },
            "functionSelector": "355274ea",
            "id": 9284,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "cap",
            "nameLocation": "1311:3:50",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9277,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1314:2:50"
            },
            "returnParameters": {
              "id": 9280,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9279,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 9284,
                  "src": "1346:7:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9278,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1346:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1345:9:50"
            },
            "scope": 9497,
            "src": "1302:81:50",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9305,
              "nodeType": "Block",
              "src": "1505:178:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 9297,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 9294,
                          "name": "_newCap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9287,
                          "src": "1536:7:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9295,
                            "name": "totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2303,
                            "src": "1546:11:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 9296,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1546:13:50",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1536:23:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433230437573746f6d3a204e6577206361702073657420746f206265206c6f776572207468616e206f7220657175616c20746f20746f74616c20737570706c7921",
                        "id": 9298,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1573:69:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_22ef5e9c4c349aa87b3e83f0339e03df37095dc3cc07c17e24dc945e43d5ab37",
                          "typeString": "literal_string \"ERC20Custom: New cap set to be lower than or equal to total supply!\""
                        },
                        "value": "ERC20Custom: New cap set to be lower than or equal to total supply!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_22ef5e9c4c349aa87b3e83f0339e03df37095dc3cc07c17e24dc945e43d5ab37",
                          "typeString": "literal_string \"ERC20Custom: New cap set to be lower than or equal to total supply!\""
                        }
                      ],
                      "id": 9293,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1515:7:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9299,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1515:137:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9300,
                  "nodeType": "ExpressionStatement",
                  "src": "1515:137:50"
                },
                {
                  "expression": {
                    "id": 9303,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 9301,
                      "name": "_cap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9229,
                      "src": "1662:4:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 9302,
                      "name": "_newCap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9287,
                      "src": "1669:7:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1662:14:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9304,
                  "nodeType": "ExpressionStatement",
                  "src": "1662:14:50"
                }
              ]
            },
            "documentation": {
              "id": 9285,
              "nodeType": "StructuredDocumentation",
              "src": "1389:42:50",
              "text": " @dev Set new cap supply"
            },
            "functionSelector": "47786d37",
            "id": 9306,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 9290,
                    "name": "DEFAULT_ADMIN_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 73,
                    "src": "1485:18:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 9291,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9289,
                  "name": "onlyRole",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 86,
                  "src": "1476:8:50"
                },
                "nodeType": "ModifierInvocation",
                "src": "1476:28:50"
              }
            ],
            "name": "setCap",
            "nameLocation": "1445:6:50",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9288,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9287,
                  "mutability": "mutable",
                  "name": "_newCap",
                  "nameLocation": "1460:7:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9306,
                  "src": "1452:15:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9286,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1452:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1451:17:50"
            },
            "returnParameters": {
              "id": 9292,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1505:0:50"
            },
            "scope": 9497,
            "src": "1436:247:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9331,
              "nodeType": "Block",
              "src": "1840:184:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 9318,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 9316,
                          "name": "_increaseCap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9309,
                          "src": "1871:12:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 9317,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1886:1:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1871:16:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433230437573746f6d3a20496e637265617365204361702076616c756520686173206e6f6e2d76616c696420302076616c756521",
                        "id": 9319,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1901:56:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1428862e5120f395ab39fd1940722c6cdb9248bb0d6d89e27c01f56b229139dc",
                          "typeString": "literal_string \"ERC20Custom: Increase Cap value has non-valid 0 value!\""
                        },
                        "value": "ERC20Custom: Increase Cap value has non-valid 0 value!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1428862e5120f395ab39fd1940722c6cdb9248bb0d6d89e27c01f56b229139dc",
                          "typeString": "literal_string \"ERC20Custom: Increase Cap value has non-valid 0 value!\""
                        }
                      ],
                      "id": 9315,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1850:7:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9320,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1850:117:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9321,
                  "nodeType": "ExpressionStatement",
                  "src": "1850:117:50"
                },
                {
                  "expression": {
                    "id": 9329,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 9322,
                      "name": "_cap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9229,
                      "src": "1977:4:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9325,
                            "name": "cap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9284,
                            "src": "1997:3:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 9326,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1997:5:50",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 9327,
                          "name": "_increaseCap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9309,
                          "src": "2004:12:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 9323,
                          "name": "SafeMath",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7057,
                          "src": "1984:8:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_SafeMath_$7057_$",
                            "typeString": "type(library SafeMath)"
                          }
                        },
                        "id": 9324,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6921,
                        "src": "1984:12:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 9328,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1984:33:50",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1977:40:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9330,
                  "nodeType": "ExpressionStatement",
                  "src": "1977:40:50"
                }
              ]
            },
            "documentation": {
              "id": 9307,
              "nodeType": "StructuredDocumentation",
              "src": "1689:47:50",
              "text": " @dev Increase the cap supply"
            },
            "functionSelector": "523e9551",
            "id": 9332,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 9312,
                    "name": "DEFAULT_ADMIN_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 73,
                    "src": "1816:18:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 9313,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9311,
                  "name": "onlyRole",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 86,
                  "src": "1807:8:50"
                },
                "nodeType": "ModifierInvocation",
                "src": "1807:28:50"
              }
            ],
            "name": "increaseCap",
            "nameLocation": "1750:11:50",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9310,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9309,
                  "mutability": "mutable",
                  "name": "_increaseCap",
                  "nameLocation": "1770:12:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9332,
                  "src": "1762:20:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9308,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1762:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1761:22:50"
            },
            "returnParameters": {
              "id": 9314,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1840:0:50"
            },
            "scope": 9497,
            "src": "1741:283:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9369,
              "nodeType": "Block",
              "src": "2181:256:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 9356,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 9344,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 9342,
                                "name": "_decreaseCap",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9335,
                                "src": "2213:12:50",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 9343,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2228:1:50",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "2213:16:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 9345,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2212:18:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 9354,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 9346,
                                "name": "_decreaseCap",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9335,
                                "src": "2251:12:50",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 9349,
                                      "name": "cap",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9284,
                                      "src": "2280:3:50",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                        "typeString": "function () view returns (uint256)"
                                      }
                                    },
                                    "id": 9350,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2280:5:50",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 9351,
                                      "name": "totalSupply",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2303,
                                      "src": "2287:11:50",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                        "typeString": "function () view returns (uint256)"
                                      }
                                    },
                                    "id": 9352,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2287:13:50",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 9347,
                                    "name": "SafeMath",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7057,
                                    "src": "2267:8:50",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_SafeMath_$7057_$",
                                      "typeString": "type(library SafeMath)"
                                    }
                                  },
                                  "id": 9348,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6936,
                                  "src": "2267:12:50",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 9353,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2267:34:50",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2251:50:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 9355,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2250:52:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2212:90:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433230437573746f6d3a204465637265617365204361702076616c756520686173206e6f6e2d76616c69642076616c756521",
                        "id": 9357,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2316:54:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_07f117695d85d13fd0c0c5515eaa75aff5be4f9e09310644c8f092ed028356c4",
                          "typeString": "literal_string \"ERC20Custom: Decrease Cap value has non-valid value!\""
                        },
                        "value": "ERC20Custom: Decrease Cap value has non-valid value!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_07f117695d85d13fd0c0c5515eaa75aff5be4f9e09310644c8f092ed028356c4",
                          "typeString": "literal_string \"ERC20Custom: Decrease Cap value has non-valid value!\""
                        }
                      ],
                      "id": 9341,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2191:7:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9358,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2191:189:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9359,
                  "nodeType": "ExpressionStatement",
                  "src": "2191:189:50"
                },
                {
                  "expression": {
                    "id": 9367,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 9360,
                      "name": "_cap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9229,
                      "src": "2390:4:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9363,
                            "name": "cap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9284,
                            "src": "2410:3:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 9364,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2410:5:50",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 9365,
                          "name": "_decreaseCap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9335,
                          "src": "2417:12:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 9361,
                          "name": "SafeMath",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7057,
                          "src": "2397:8:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_SafeMath_$7057_$",
                            "typeString": "type(library SafeMath)"
                          }
                        },
                        "id": 9362,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6936,
                        "src": "2397:12:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 9366,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2397:33:50",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2390:40:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9368,
                  "nodeType": "ExpressionStatement",
                  "src": "2390:40:50"
                }
              ]
            },
            "documentation": {
              "id": 9333,
              "nodeType": "StructuredDocumentation",
              "src": "2030:47:50",
              "text": " @dev Decrease the cap supply"
            },
            "functionSelector": "7430a689",
            "id": 9370,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 9338,
                    "name": "DEFAULT_ADMIN_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 73,
                    "src": "2157:18:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 9339,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9337,
                  "name": "onlyRole",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 86,
                  "src": "2148:8:50"
                },
                "nodeType": "ModifierInvocation",
                "src": "2148:28:50"
              }
            ],
            "name": "decreaseCap",
            "nameLocation": "2091:11:50",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9336,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9335,
                  "mutability": "mutable",
                  "name": "_decreaseCap",
                  "nameLocation": "2111:12:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9370,
                  "src": "2103:20:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9334,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2103:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2102:22:50"
            },
            "returnParameters": {
              "id": 9340,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2181:0:50"
            },
            "scope": 9497,
            "src": "2082:355:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9379,
              "nodeType": "Block",
              "src": "2489:25:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9376,
                      "name": "_pause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 685,
                      "src": "2499:6:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 9377,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2499:8:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9378,
                  "nodeType": "ExpressionStatement",
                  "src": "2499:8:50"
                }
              ]
            },
            "functionSelector": "8456cb59",
            "id": 9380,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 9373,
                    "name": "PAUSER_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9222,
                    "src": "2476:11:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 9374,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9372,
                  "name": "onlyRole",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 86,
                  "src": "2467:8:50"
                },
                "nodeType": "ModifierInvocation",
                "src": "2467:21:50"
              }
            ],
            "name": "pause",
            "nameLocation": "2452:5:50",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9371,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2457:2:50"
            },
            "returnParameters": {
              "id": 9375,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2489:0:50"
            },
            "scope": 9497,
            "src": "2443:71:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9389,
              "nodeType": "Block",
              "src": "2568:27:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9386,
                      "name": "_unpause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 701,
                      "src": "2578:8:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 9387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2578:10:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9388,
                  "nodeType": "ExpressionStatement",
                  "src": "2578:10:50"
                }
              ]
            },
            "functionSelector": "3f4ba83a",
            "id": 9390,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 9383,
                    "name": "PAUSER_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9222,
                    "src": "2555:11:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 9384,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9382,
                  "name": "onlyRole",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 86,
                  "src": "2546:8:50"
                },
                "nodeType": "ModifierInvocation",
                "src": "2546:21:50"
              }
            ],
            "name": "unpause",
            "nameLocation": "2529:7:50",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9381,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2536:2:50"
            },
            "returnParameters": {
              "id": 9385,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2568:0:50"
            },
            "scope": 9497,
            "src": "2520:75:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9405,
              "nodeType": "Block",
              "src": "2672:34:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9401,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9392,
                        "src": "2688:2:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9402,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9394,
                        "src": "2692:6:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 9400,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9478
                      ],
                      "referencedDeclaration": 9478,
                      "src": "2682:5:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 9403,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2682:17:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9404,
                  "nodeType": "ExpressionStatement",
                  "src": "2682:17:50"
                }
              ]
            },
            "functionSelector": "40c10f19",
            "id": 9406,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 9397,
                    "name": "MINTER_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9227,
                    "src": "2659:11:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 9398,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9396,
                  "name": "onlyRole",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 86,
                  "src": "2650:8:50"
                },
                "nodeType": "ModifierInvocation",
                "src": "2650:21:50"
              }
            ],
            "name": "mint",
            "nameLocation": "2610:4:50",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9395,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9392,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "2623:2:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9406,
                  "src": "2615:10:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9391,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2615:7:50",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9394,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "2635:6:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9406,
                  "src": "2627:14:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9393,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2627:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2614:28:50"
            },
            "returnParameters": {
              "id": 9399,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2672:0:50"
            },
            "scope": 9497,
            "src": "2601:105:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              2794
            ],
            "body": {
              "id": 9426,
              "nodeType": "Block",
              "src": "2846:61:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9421,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9408,
                        "src": "2883:4:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9422,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9410,
                        "src": "2889:2:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9423,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9412,
                        "src": "2893:6:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 9418,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967271,
                        "src": "2856:5:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_ERC20Custom_$9497_$",
                          "typeString": "type(contract super ERC20Custom)"
                        }
                      },
                      "id": 9420,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_beforeTokenTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2794,
                      "src": "2856:26:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 9424,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2856:44:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9425,
                  "nodeType": "ExpressionStatement",
                  "src": "2856:44:50"
                }
              ]
            },
            "id": 9427,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9416,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9415,
                  "name": "whenNotPaused",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 658,
                  "src": "2832:13:50"
                },
                "nodeType": "ModifierInvocation",
                "src": "2832:13:50"
              }
            ],
            "name": "_beforeTokenTransfer",
            "nameLocation": "2721:20:50",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9414,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2823:8:50"
            },
            "parameters": {
              "id": 9413,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9408,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "2759:4:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9427,
                  "src": "2751:12:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9407,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2751:7:50",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9410,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "2781:2:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9427,
                  "src": "2773:10:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9409,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2773:7:50",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9412,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "2801:6:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9427,
                  "src": "2793:14:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9411,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2793:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2741:72:50"
            },
            "returnParameters": {
              "id": 9417,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2846:0:50"
            },
            "scope": 9497,
            "src": "2712:195:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              2805,
              3332
            ],
            "body": {
              "id": 9447,
              "nodeType": "Block",
              "src": "3119:60:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9442,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9429,
                        "src": "3155:4:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9443,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9431,
                        "src": "3161:2:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9444,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9433,
                        "src": "3165:6:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 9439,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967271,
                        "src": "3129:5:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_ERC20Custom_$9497_$",
                          "typeString": "type(contract super ERC20Custom)"
                        }
                      },
                      "id": 9441,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_afterTokenTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3332,
                      "src": "3129:25:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 9445,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3129:43:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9446,
                  "nodeType": "ExpressionStatement",
                  "src": "3129:43:50"
                }
              ]
            },
            "id": 9448,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterTokenTransfer",
            "nameLocation": "2990:19:50",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9437,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 9435,
                  "name": "ERC20",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2806,
                  "src": "3100:5:50"
                },
                {
                  "id": 9436,
                  "name": "ERC20Votes",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3565,
                  "src": "3107:10:50"
                }
              ],
              "src": "3091:27:50"
            },
            "parameters": {
              "id": 9434,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9429,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "3027:4:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9448,
                  "src": "3019:12:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9428,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3019:7:50",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9431,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "3049:2:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9448,
                  "src": "3041:10:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9430,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3041:7:50",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9433,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "3069:6:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9448,
                  "src": "3061:14:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9432,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3061:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3009:72:50"
            },
            "returnParameters": {
              "id": 9438,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3119:0:50"
            },
            "scope": 9497,
            "src": "2981:198:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              2623,
              3279
            ],
            "body": {
              "id": 9477,
              "nodeType": "Block",
              "src": "3285:159:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 9466,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9463,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 9459,
                                "name": "ERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2806,
                                "src": "3316:5:50",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ERC20_$2806_$",
                                  "typeString": "type(contract ERC20)"
                                }
                              },
                              "id": 9460,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "totalSupply",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2303,
                              "src": "3316:17:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                "typeString": "function () view returns (uint256)"
                              }
                            },
                            "id": 9461,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3316:19:50",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "id": 9462,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9452,
                            "src": "3338:6:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3316:28:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9464,
                            "name": "cap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9284,
                            "src": "3348:3:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 9465,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3348:5:50",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3316:37:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332304361707065643a20636170206578636565646564",
                        "id": 9467,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3367:27:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c0532a65ade852f12d67926b1625bbc98f7eb7c650703bf531fd4e07ded2c49f",
                          "typeString": "literal_string \"ERC20Capped: cap exceeded\""
                        },
                        "value": "ERC20Capped: cap exceeded"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c0532a65ade852f12d67926b1625bbc98f7eb7c650703bf531fd4e07ded2c49f",
                          "typeString": "literal_string \"ERC20Capped: cap exceeded\""
                        }
                      ],
                      "id": 9458,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "3295:7:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3295:109:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9469,
                  "nodeType": "ExpressionStatement",
                  "src": "3295:109:50"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9473,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9450,
                        "src": "3426:2:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9474,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9452,
                        "src": "3430:6:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 9470,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967271,
                        "src": "3414:5:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_ERC20Custom_$9497_$",
                          "typeString": "type(contract super ERC20Custom)"
                        }
                      },
                      "id": 9472,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3279,
                      "src": "3414:11:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 9475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3414:23:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9476,
                  "nodeType": "ExpressionStatement",
                  "src": "3414:23:50"
                }
              ]
            },
            "id": 9478,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nameLocation": "3194:5:50",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9456,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 9454,
                  "name": "ERC20",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2806,
                  "src": "3262:5:50"
                },
                {
                  "id": 9455,
                  "name": "ERC20Votes",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3565,
                  "src": "3269:10:50"
                }
              ],
              "src": "3253:27:50"
            },
            "parameters": {
              "id": 9453,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9450,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "3208:2:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9478,
                  "src": "3200:10:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9449,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3200:7:50",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9452,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "3220:6:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9478,
                  "src": "3212:14:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9451,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3212:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3199:28:50"
            },
            "returnParameters": {
              "id": 9457,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3285:0:50"
            },
            "scope": 9497,
            "src": "3185:259:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              2695,
              3302
            ],
            "body": {
              "id": 9495,
              "nodeType": "Block",
              "src": "3555:45:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9491,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9480,
                        "src": "3577:7:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9492,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9482,
                        "src": "3586:6:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 9488,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967271,
                        "src": "3565:5:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_ERC20Custom_$9497_$",
                          "typeString": "type(contract super ERC20Custom)"
                        }
                      },
                      "id": 9490,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3302,
                      "src": "3565:11:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 9493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3565:28:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9494,
                  "nodeType": "ExpressionStatement",
                  "src": "3565:28:50"
                }
              ]
            },
            "id": 9496,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_burn",
            "nameLocation": "3459:5:50",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9486,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 9484,
                  "name": "ERC20",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2806,
                  "src": "3532:5:50"
                },
                {
                  "id": 9485,
                  "name": "ERC20Votes",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3565,
                  "src": "3539:10:50"
                }
              ],
              "src": "3523:27:50"
            },
            "parameters": {
              "id": 9483,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9480,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "3473:7:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9496,
                  "src": "3465:15:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9479,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3465:7:50",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9482,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "3490:6:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9496,
                  "src": "3482:14:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9481,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3482:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3464:33:50"
            },
            "returnParameters": {
              "id": 9487,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3555:0:50"
            },
            "scope": 9497,
            "src": "3450:150:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 9498,
        "src": "520:3082:50",
        "usedErrors": []
      }
    ],
    "src": "38:3565:50"
  },
  "legacyAST": {
    "absolutePath": "project:/contracts/token/ERC20Custom.sol",
    "exportedSymbols": {
      "AccessControl": [
        354
      ],
      "Context": [
        5297
      ],
      "Counters": [
        5371
      ],
      "ECDSA": [
        5981
      ],
      "EIP712": [
        6228
      ],
      "ERC165": [
        6252
      ],
      "ERC20": [
        2806
      ],
      "ERC20Burnable": [
        2928
      ],
      "ERC20Custom": [
        9497
      ],
      "ERC20Permit": [
        3759
      ],
      "ERC20Votes": [
        3565
      ],
      "IAccessControl": [
        427
      ],
      "IERC165": [
        6264
      ],
      "IERC20": [
        2884
      ],
      "IERC20Metadata": [
        3590
      ],
      "IERC20Permit": [
        3795
      ],
      "IVotes": [
        610
      ],
      "Math": [
        6352
      ],
      "Pausable": [
        702
      ],
      "SafeCast": [
        6745
      ],
      "SafeMath": [
        7057
      ],
      "Strings": [
        5574
      ]
    },
    "id": 9498,
    "license": "AGPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 9195,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "38:24:50"
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
        "id": 9196,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9498,
        "sourceUnit": 2807,
        "src": "64:55:50",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol",
        "file": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol",
        "id": 9197,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9498,
        "sourceUnit": 2929,
        "src": "120:74:50",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/security/Pausable.sol",
        "file": "@openzeppelin/contracts/security/Pausable.sol",
        "id": 9198,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9498,
        "sourceUnit": 703,
        "src": "195:55:50",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/access/AccessControl.sol",
        "file": "@openzeppelin/contracts/access/AccessControl.sol",
        "id": 9199,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9498,
        "sourceUnit": 355,
        "src": "251:58:50",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol",
        "file": "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol",
        "id": 9200,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9498,
        "sourceUnit": 3760,
        "src": "310:78:50",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol",
        "file": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol",
        "id": 9201,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9498,
        "sourceUnit": 3566,
        "src": "389:71:50",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/utils/math/SafeMath.sol",
        "id": 9202,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9498,
        "sourceUnit": 7058,
        "src": "461:57:50",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 9203,
              "name": "ERC20",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2806,
              "src": "548:5:50"
            },
            "id": 9204,
            "nodeType": "InheritanceSpecifier",
            "src": "548:5:50"
          },
          {
            "baseName": {
              "id": 9205,
              "name": "ERC20Burnable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2928,
              "src": "559:13:50"
            },
            "id": 9206,
            "nodeType": "InheritanceSpecifier",
            "src": "559:13:50"
          },
          {
            "baseName": {
              "id": 9207,
              "name": "Pausable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 702,
              "src": "578:8:50"
            },
            "id": 9208,
            "nodeType": "InheritanceSpecifier",
            "src": "578:8:50"
          },
          {
            "baseName": {
              "id": 9209,
              "name": "AccessControl",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 354,
              "src": "592:13:50"
            },
            "id": 9210,
            "nodeType": "InheritanceSpecifier",
            "src": "592:13:50"
          },
          {
            "baseName": {
              "id": 9211,
              "name": "ERC20Permit",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 3759,
              "src": "611:11:50"
            },
            "id": 9212,
            "nodeType": "InheritanceSpecifier",
            "src": "611:11:50"
          },
          {
            "baseName": {
              "id": 9213,
              "name": "ERC20Votes",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 3565,
              "src": "628:10:50"
            },
            "id": 9214,
            "nodeType": "InheritanceSpecifier",
            "src": "628:10:50"
          }
        ],
        "canonicalName": "ERC20Custom",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 9497,
        "linearizedBaseContracts": [
          9497,
          3565,
          3759,
          6228,
          3795,
          354,
          6252,
          6264,
          427,
          702,
          2928,
          2806,
          3590,
          2884,
          5297,
          610
        ],
        "name": "ERC20Custom",
        "nameLocation": "529:11:50",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 9217,
            "libraryName": {
              "id": 9215,
              "name": "SafeMath",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 7057,
              "src": "651:8:50"
            },
            "nodeType": "UsingForDirective",
            "src": "645:27:50",
            "typeName": {
              "id": 9216,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "664:7:50",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "functionSelector": "e63ab1e9",
            "id": 9222,
            "mutability": "constant",
            "name": "PAUSER_ROLE",
            "nameLocation": "702:11:50",
            "nodeType": "VariableDeclaration",
            "scope": 9497,
            "src": "678:62:50",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 9218,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "678:7:50",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "5041555345525f524f4c45",
                  "id": 9220,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "726:13:50",
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a",
                    "typeString": "literal_string \"PAUSER_ROLE\""
                  },
                  "value": "PAUSER_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a",
                    "typeString": "literal_string \"PAUSER_ROLE\""
                  }
                ],
                "id": 9219,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 4294967288,
                "src": "716:9:50",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 9221,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "716:24:50",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "functionSelector": "d5391393",
            "id": 9227,
            "mutability": "constant",
            "name": "MINTER_ROLE",
            "nameLocation": "770:11:50",
            "nodeType": "VariableDeclaration",
            "scope": 9497,
            "src": "746:62:50",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 9223,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "746:7:50",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "4d494e5445525f524f4c45",
                  "id": 9225,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "794:13:50",
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6",
                    "typeString": "literal_string \"MINTER_ROLE\""
                  },
                  "value": "MINTER_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6",
                    "typeString": "literal_string \"MINTER_ROLE\""
                  }
                ],
                "id": 9224,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 4294967288,
                "src": "784:9:50",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 9226,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "784:24:50",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 9229,
            "mutability": "mutable",
            "name": "_cap",
            "nameLocation": "830:4:50",
            "nodeType": "VariableDeclaration",
            "scope": 9497,
            "src": "814:20:50",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 9228,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "814:7:50",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 9274,
              "nodeType": "Block",
              "src": "988:235:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 9248,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 9246,
                          "name": "_capSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9235,
                          "src": "1006:10:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 9247,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1019:1:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1006:14:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332304361707065643a206361702069732030",
                        "id": 9249,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1022:23:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_073f3193e2b9c9099973df1adea790edf33994edcd3f57beae2487f3c5bd8828",
                          "typeString": "literal_string \"ERC20Capped: cap is 0\""
                        },
                        "value": "ERC20Capped: cap is 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_073f3193e2b9c9099973df1adea790edf33994edcd3f57beae2487f3c5bd8828",
                          "typeString": "literal_string \"ERC20Capped: cap is 0\""
                        }
                      ],
                      "id": 9245,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "998:7:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9250,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "998:48:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9251,
                  "nodeType": "ExpressionStatement",
                  "src": "998:48:50"
                },
                {
                  "expression": {
                    "id": 9254,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 9252,
                      "name": "_cap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9229,
                      "src": "1056:4:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 9253,
                      "name": "_capSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9235,
                      "src": "1063:10:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1056:17:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9255,
                  "nodeType": "ExpressionStatement",
                  "src": "1056:17:50"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9257,
                        "name": "DEFAULT_ADMIN_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 73,
                        "src": "1095:18:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "expression": {
                          "id": 9258,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "1115:3:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 9259,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1115:10:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 9256,
                      "name": "_grantRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 322,
                      "src": "1084:10:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 9260,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1084:42:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9261,
                  "nodeType": "ExpressionStatement",
                  "src": "1084:42:50"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9263,
                        "name": "PAUSER_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9222,
                        "src": "1147:11:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "expression": {
                          "id": 9264,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "1160:3:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 9265,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1160:10:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 9262,
                      "name": "_grantRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 322,
                      "src": "1136:10:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 9266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1136:35:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9267,
                  "nodeType": "ExpressionStatement",
                  "src": "1136:35:50"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9269,
                        "name": "MINTER_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9227,
                        "src": "1192:11:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "expression": {
                          "id": 9270,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "1205:3:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 9271,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1205:10:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 9268,
                      "name": "_grantRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 322,
                      "src": "1181:10:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 9272,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1181:35:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9273,
                  "nodeType": "ExpressionStatement",
                  "src": "1181:35:50"
                }
              ]
            },
            "id": 9275,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 9238,
                    "name": "_name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9231,
                    "src": "953:5:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "id": 9239,
                    "name": "_symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9233,
                    "src": "960:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  }
                ],
                "id": 9240,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 9237,
                  "name": "ERC20",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2806,
                  "src": "947:5:50"
                },
                "nodeType": "ModifierInvocation",
                "src": "947:21:50"
              },
              {
                "arguments": [
                  {
                    "id": 9242,
                    "name": "_name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9231,
                    "src": "981:5:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  }
                ],
                "id": 9243,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 9241,
                  "name": "ERC20Permit",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3759,
                  "src": "969:11:50"
                },
                "nodeType": "ModifierInvocation",
                "src": "969:18:50"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9236,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9231,
                  "mutability": "mutable",
                  "name": "_name",
                  "nameLocation": "876:5:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9275,
                  "src": "862:19:50",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 9230,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "862:6:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9233,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nameLocation": "905:7:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9275,
                  "src": "891:21:50",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 9232,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "891:6:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9235,
                  "mutability": "mutable",
                  "name": "_capSupply",
                  "nameLocation": "930:10:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9275,
                  "src": "922:18:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9234,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "922:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "852:94:50"
            },
            "returnParameters": {
              "id": 9244,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "988:0:50"
            },
            "scope": 9497,
            "src": "841:382:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9283,
              "nodeType": "Block",
              "src": "1355:28:50",
              "statements": [
                {
                  "expression": {
                    "id": 9281,
                    "name": "_cap",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9229,
                    "src": "1372:4:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9280,
                  "id": 9282,
                  "nodeType": "Return",
                  "src": "1365:11:50"
                }
              ]
            },
            "documentation": {
              "id": 9276,
              "nodeType": "StructuredDocumentation",
              "src": "1229:68:50",
              "text": " @dev Returns the cap on the token's total supply."
            },
            "functionSelector": "355274ea",
            "id": 9284,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "cap",
            "nameLocation": "1311:3:50",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9277,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1314:2:50"
            },
            "returnParameters": {
              "id": 9280,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9279,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 9284,
                  "src": "1346:7:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9278,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1346:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1345:9:50"
            },
            "scope": 9497,
            "src": "1302:81:50",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9305,
              "nodeType": "Block",
              "src": "1505:178:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 9297,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 9294,
                          "name": "_newCap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9287,
                          "src": "1536:7:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9295,
                            "name": "totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2303,
                            "src": "1546:11:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 9296,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1546:13:50",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1536:23:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433230437573746f6d3a204e6577206361702073657420746f206265206c6f776572207468616e206f7220657175616c20746f20746f74616c20737570706c7921",
                        "id": 9298,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1573:69:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_22ef5e9c4c349aa87b3e83f0339e03df37095dc3cc07c17e24dc945e43d5ab37",
                          "typeString": "literal_string \"ERC20Custom: New cap set to be lower than or equal to total supply!\""
                        },
                        "value": "ERC20Custom: New cap set to be lower than or equal to total supply!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_22ef5e9c4c349aa87b3e83f0339e03df37095dc3cc07c17e24dc945e43d5ab37",
                          "typeString": "literal_string \"ERC20Custom: New cap set to be lower than or equal to total supply!\""
                        }
                      ],
                      "id": 9293,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1515:7:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9299,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1515:137:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9300,
                  "nodeType": "ExpressionStatement",
                  "src": "1515:137:50"
                },
                {
                  "expression": {
                    "id": 9303,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 9301,
                      "name": "_cap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9229,
                      "src": "1662:4:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 9302,
                      "name": "_newCap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9287,
                      "src": "1669:7:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1662:14:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9304,
                  "nodeType": "ExpressionStatement",
                  "src": "1662:14:50"
                }
              ]
            },
            "documentation": {
              "id": 9285,
              "nodeType": "StructuredDocumentation",
              "src": "1389:42:50",
              "text": " @dev Set new cap supply"
            },
            "functionSelector": "47786d37",
            "id": 9306,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 9290,
                    "name": "DEFAULT_ADMIN_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 73,
                    "src": "1485:18:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 9291,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9289,
                  "name": "onlyRole",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 86,
                  "src": "1476:8:50"
                },
                "nodeType": "ModifierInvocation",
                "src": "1476:28:50"
              }
            ],
            "name": "setCap",
            "nameLocation": "1445:6:50",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9288,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9287,
                  "mutability": "mutable",
                  "name": "_newCap",
                  "nameLocation": "1460:7:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9306,
                  "src": "1452:15:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9286,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1452:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1451:17:50"
            },
            "returnParameters": {
              "id": 9292,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1505:0:50"
            },
            "scope": 9497,
            "src": "1436:247:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9331,
              "nodeType": "Block",
              "src": "1840:184:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 9318,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 9316,
                          "name": "_increaseCap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9309,
                          "src": "1871:12:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 9317,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1886:1:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1871:16:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433230437573746f6d3a20496e637265617365204361702076616c756520686173206e6f6e2d76616c696420302076616c756521",
                        "id": 9319,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1901:56:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1428862e5120f395ab39fd1940722c6cdb9248bb0d6d89e27c01f56b229139dc",
                          "typeString": "literal_string \"ERC20Custom: Increase Cap value has non-valid 0 value!\""
                        },
                        "value": "ERC20Custom: Increase Cap value has non-valid 0 value!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1428862e5120f395ab39fd1940722c6cdb9248bb0d6d89e27c01f56b229139dc",
                          "typeString": "literal_string \"ERC20Custom: Increase Cap value has non-valid 0 value!\""
                        }
                      ],
                      "id": 9315,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1850:7:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9320,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1850:117:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9321,
                  "nodeType": "ExpressionStatement",
                  "src": "1850:117:50"
                },
                {
                  "expression": {
                    "id": 9329,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 9322,
                      "name": "_cap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9229,
                      "src": "1977:4:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9325,
                            "name": "cap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9284,
                            "src": "1997:3:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 9326,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1997:5:50",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 9327,
                          "name": "_increaseCap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9309,
                          "src": "2004:12:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 9323,
                          "name": "SafeMath",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7057,
                          "src": "1984:8:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_SafeMath_$7057_$",
                            "typeString": "type(library SafeMath)"
                          }
                        },
                        "id": 9324,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6921,
                        "src": "1984:12:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 9328,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1984:33:50",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1977:40:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9330,
                  "nodeType": "ExpressionStatement",
                  "src": "1977:40:50"
                }
              ]
            },
            "documentation": {
              "id": 9307,
              "nodeType": "StructuredDocumentation",
              "src": "1689:47:50",
              "text": " @dev Increase the cap supply"
            },
            "functionSelector": "523e9551",
            "id": 9332,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 9312,
                    "name": "DEFAULT_ADMIN_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 73,
                    "src": "1816:18:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 9313,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9311,
                  "name": "onlyRole",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 86,
                  "src": "1807:8:50"
                },
                "nodeType": "ModifierInvocation",
                "src": "1807:28:50"
              }
            ],
            "name": "increaseCap",
            "nameLocation": "1750:11:50",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9310,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9309,
                  "mutability": "mutable",
                  "name": "_increaseCap",
                  "nameLocation": "1770:12:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9332,
                  "src": "1762:20:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9308,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1762:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1761:22:50"
            },
            "returnParameters": {
              "id": 9314,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1840:0:50"
            },
            "scope": 9497,
            "src": "1741:283:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9369,
              "nodeType": "Block",
              "src": "2181:256:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 9356,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 9344,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 9342,
                                "name": "_decreaseCap",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9335,
                                "src": "2213:12:50",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 9343,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2228:1:50",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "2213:16:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 9345,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2212:18:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 9354,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 9346,
                                "name": "_decreaseCap",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9335,
                                "src": "2251:12:50",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 9349,
                                      "name": "cap",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9284,
                                      "src": "2280:3:50",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                        "typeString": "function () view returns (uint256)"
                                      }
                                    },
                                    "id": 9350,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2280:5:50",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 9351,
                                      "name": "totalSupply",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2303,
                                      "src": "2287:11:50",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                        "typeString": "function () view returns (uint256)"
                                      }
                                    },
                                    "id": 9352,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2287:13:50",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 9347,
                                    "name": "SafeMath",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7057,
                                    "src": "2267:8:50",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_SafeMath_$7057_$",
                                      "typeString": "type(library SafeMath)"
                                    }
                                  },
                                  "id": 9348,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6936,
                                  "src": "2267:12:50",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 9353,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2267:34:50",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2251:50:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 9355,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2250:52:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2212:90:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433230437573746f6d3a204465637265617365204361702076616c756520686173206e6f6e2d76616c69642076616c756521",
                        "id": 9357,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2316:54:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_07f117695d85d13fd0c0c5515eaa75aff5be4f9e09310644c8f092ed028356c4",
                          "typeString": "literal_string \"ERC20Custom: Decrease Cap value has non-valid value!\""
                        },
                        "value": "ERC20Custom: Decrease Cap value has non-valid value!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_07f117695d85d13fd0c0c5515eaa75aff5be4f9e09310644c8f092ed028356c4",
                          "typeString": "literal_string \"ERC20Custom: Decrease Cap value has non-valid value!\""
                        }
                      ],
                      "id": 9341,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2191:7:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9358,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2191:189:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9359,
                  "nodeType": "ExpressionStatement",
                  "src": "2191:189:50"
                },
                {
                  "expression": {
                    "id": 9367,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 9360,
                      "name": "_cap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9229,
                      "src": "2390:4:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9363,
                            "name": "cap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9284,
                            "src": "2410:3:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 9364,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2410:5:50",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 9365,
                          "name": "_decreaseCap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9335,
                          "src": "2417:12:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 9361,
                          "name": "SafeMath",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7057,
                          "src": "2397:8:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_SafeMath_$7057_$",
                            "typeString": "type(library SafeMath)"
                          }
                        },
                        "id": 9362,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6936,
                        "src": "2397:12:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 9366,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2397:33:50",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2390:40:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9368,
                  "nodeType": "ExpressionStatement",
                  "src": "2390:40:50"
                }
              ]
            },
            "documentation": {
              "id": 9333,
              "nodeType": "StructuredDocumentation",
              "src": "2030:47:50",
              "text": " @dev Decrease the cap supply"
            },
            "functionSelector": "7430a689",
            "id": 9370,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 9338,
                    "name": "DEFAULT_ADMIN_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 73,
                    "src": "2157:18:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 9339,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9337,
                  "name": "onlyRole",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 86,
                  "src": "2148:8:50"
                },
                "nodeType": "ModifierInvocation",
                "src": "2148:28:50"
              }
            ],
            "name": "decreaseCap",
            "nameLocation": "2091:11:50",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9336,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9335,
                  "mutability": "mutable",
                  "name": "_decreaseCap",
                  "nameLocation": "2111:12:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9370,
                  "src": "2103:20:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9334,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2103:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2102:22:50"
            },
            "returnParameters": {
              "id": 9340,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2181:0:50"
            },
            "scope": 9497,
            "src": "2082:355:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9379,
              "nodeType": "Block",
              "src": "2489:25:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9376,
                      "name": "_pause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 685,
                      "src": "2499:6:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 9377,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2499:8:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9378,
                  "nodeType": "ExpressionStatement",
                  "src": "2499:8:50"
                }
              ]
            },
            "functionSelector": "8456cb59",
            "id": 9380,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 9373,
                    "name": "PAUSER_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9222,
                    "src": "2476:11:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 9374,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9372,
                  "name": "onlyRole",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 86,
                  "src": "2467:8:50"
                },
                "nodeType": "ModifierInvocation",
                "src": "2467:21:50"
              }
            ],
            "name": "pause",
            "nameLocation": "2452:5:50",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9371,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2457:2:50"
            },
            "returnParameters": {
              "id": 9375,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2489:0:50"
            },
            "scope": 9497,
            "src": "2443:71:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9389,
              "nodeType": "Block",
              "src": "2568:27:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9386,
                      "name": "_unpause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 701,
                      "src": "2578:8:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 9387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2578:10:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9388,
                  "nodeType": "ExpressionStatement",
                  "src": "2578:10:50"
                }
              ]
            },
            "functionSelector": "3f4ba83a",
            "id": 9390,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 9383,
                    "name": "PAUSER_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9222,
                    "src": "2555:11:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 9384,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9382,
                  "name": "onlyRole",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 86,
                  "src": "2546:8:50"
                },
                "nodeType": "ModifierInvocation",
                "src": "2546:21:50"
              }
            ],
            "name": "unpause",
            "nameLocation": "2529:7:50",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9381,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2536:2:50"
            },
            "returnParameters": {
              "id": 9385,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2568:0:50"
            },
            "scope": 9497,
            "src": "2520:75:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9405,
              "nodeType": "Block",
              "src": "2672:34:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9401,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9392,
                        "src": "2688:2:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9402,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9394,
                        "src": "2692:6:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 9400,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        9478
                      ],
                      "referencedDeclaration": 9478,
                      "src": "2682:5:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 9403,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2682:17:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9404,
                  "nodeType": "ExpressionStatement",
                  "src": "2682:17:50"
                }
              ]
            },
            "functionSelector": "40c10f19",
            "id": 9406,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 9397,
                    "name": "MINTER_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9227,
                    "src": "2659:11:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 9398,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9396,
                  "name": "onlyRole",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 86,
                  "src": "2650:8:50"
                },
                "nodeType": "ModifierInvocation",
                "src": "2650:21:50"
              }
            ],
            "name": "mint",
            "nameLocation": "2610:4:50",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9395,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9392,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "2623:2:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9406,
                  "src": "2615:10:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9391,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2615:7:50",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9394,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "2635:6:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9406,
                  "src": "2627:14:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9393,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2627:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2614:28:50"
            },
            "returnParameters": {
              "id": 9399,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2672:0:50"
            },
            "scope": 9497,
            "src": "2601:105:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              2794
            ],
            "body": {
              "id": 9426,
              "nodeType": "Block",
              "src": "2846:61:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9421,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9408,
                        "src": "2883:4:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9422,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9410,
                        "src": "2889:2:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9423,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9412,
                        "src": "2893:6:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 9418,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967271,
                        "src": "2856:5:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_ERC20Custom_$9497_$",
                          "typeString": "type(contract super ERC20Custom)"
                        }
                      },
                      "id": 9420,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_beforeTokenTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2794,
                      "src": "2856:26:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 9424,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2856:44:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9425,
                  "nodeType": "ExpressionStatement",
                  "src": "2856:44:50"
                }
              ]
            },
            "id": 9427,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9416,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9415,
                  "name": "whenNotPaused",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 658,
                  "src": "2832:13:50"
                },
                "nodeType": "ModifierInvocation",
                "src": "2832:13:50"
              }
            ],
            "name": "_beforeTokenTransfer",
            "nameLocation": "2721:20:50",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9414,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2823:8:50"
            },
            "parameters": {
              "id": 9413,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9408,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "2759:4:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9427,
                  "src": "2751:12:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9407,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2751:7:50",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9410,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "2781:2:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9427,
                  "src": "2773:10:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9409,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2773:7:50",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9412,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "2801:6:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9427,
                  "src": "2793:14:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9411,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2793:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2741:72:50"
            },
            "returnParameters": {
              "id": 9417,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2846:0:50"
            },
            "scope": 9497,
            "src": "2712:195:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              2805,
              3332
            ],
            "body": {
              "id": 9447,
              "nodeType": "Block",
              "src": "3119:60:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9442,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9429,
                        "src": "3155:4:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9443,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9431,
                        "src": "3161:2:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9444,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9433,
                        "src": "3165:6:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 9439,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967271,
                        "src": "3129:5:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_ERC20Custom_$9497_$",
                          "typeString": "type(contract super ERC20Custom)"
                        }
                      },
                      "id": 9441,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_afterTokenTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3332,
                      "src": "3129:25:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 9445,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3129:43:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9446,
                  "nodeType": "ExpressionStatement",
                  "src": "3129:43:50"
                }
              ]
            },
            "id": 9448,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterTokenTransfer",
            "nameLocation": "2990:19:50",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9437,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 9435,
                  "name": "ERC20",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2806,
                  "src": "3100:5:50"
                },
                {
                  "id": 9436,
                  "name": "ERC20Votes",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3565,
                  "src": "3107:10:50"
                }
              ],
              "src": "3091:27:50"
            },
            "parameters": {
              "id": 9434,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9429,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "3027:4:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9448,
                  "src": "3019:12:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9428,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3019:7:50",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9431,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "3049:2:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9448,
                  "src": "3041:10:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9430,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3041:7:50",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9433,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "3069:6:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9448,
                  "src": "3061:14:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9432,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3061:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3009:72:50"
            },
            "returnParameters": {
              "id": 9438,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3119:0:50"
            },
            "scope": 9497,
            "src": "2981:198:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              2623,
              3279
            ],
            "body": {
              "id": 9477,
              "nodeType": "Block",
              "src": "3285:159:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 9466,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9463,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 9459,
                                "name": "ERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2806,
                                "src": "3316:5:50",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ERC20_$2806_$",
                                  "typeString": "type(contract ERC20)"
                                }
                              },
                              "id": 9460,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "totalSupply",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2303,
                              "src": "3316:17:50",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                "typeString": "function () view returns (uint256)"
                              }
                            },
                            "id": 9461,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3316:19:50",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "id": 9462,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9452,
                            "src": "3338:6:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3316:28:50",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9464,
                            "name": "cap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9284,
                            "src": "3348:3:50",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 9465,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3348:5:50",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3316:37:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332304361707065643a20636170206578636565646564",
                        "id": 9467,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3367:27:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c0532a65ade852f12d67926b1625bbc98f7eb7c650703bf531fd4e07ded2c49f",
                          "typeString": "literal_string \"ERC20Capped: cap exceeded\""
                        },
                        "value": "ERC20Capped: cap exceeded"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c0532a65ade852f12d67926b1625bbc98f7eb7c650703bf531fd4e07ded2c49f",
                          "typeString": "literal_string \"ERC20Capped: cap exceeded\""
                        }
                      ],
                      "id": 9458,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "3295:7:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3295:109:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9469,
                  "nodeType": "ExpressionStatement",
                  "src": "3295:109:50"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9473,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9450,
                        "src": "3426:2:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9474,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9452,
                        "src": "3430:6:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 9470,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967271,
                        "src": "3414:5:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_ERC20Custom_$9497_$",
                          "typeString": "type(contract super ERC20Custom)"
                        }
                      },
                      "id": 9472,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3279,
                      "src": "3414:11:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 9475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3414:23:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9476,
                  "nodeType": "ExpressionStatement",
                  "src": "3414:23:50"
                }
              ]
            },
            "id": 9478,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nameLocation": "3194:5:50",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9456,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 9454,
                  "name": "ERC20",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2806,
                  "src": "3262:5:50"
                },
                {
                  "id": 9455,
                  "name": "ERC20Votes",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3565,
                  "src": "3269:10:50"
                }
              ],
              "src": "3253:27:50"
            },
            "parameters": {
              "id": 9453,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9450,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "3208:2:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9478,
                  "src": "3200:10:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9449,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3200:7:50",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9452,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "3220:6:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9478,
                  "src": "3212:14:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9451,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3212:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3199:28:50"
            },
            "returnParameters": {
              "id": 9457,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3285:0:50"
            },
            "scope": 9497,
            "src": "3185:259:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              2695,
              3302
            ],
            "body": {
              "id": 9495,
              "nodeType": "Block",
              "src": "3555:45:50",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9491,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9480,
                        "src": "3577:7:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9492,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9482,
                        "src": "3586:6:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 9488,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967271,
                        "src": "3565:5:50",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_ERC20Custom_$9497_$",
                          "typeString": "type(contract super ERC20Custom)"
                        }
                      },
                      "id": 9490,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3302,
                      "src": "3565:11:50",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 9493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3565:28:50",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9494,
                  "nodeType": "ExpressionStatement",
                  "src": "3565:28:50"
                }
              ]
            },
            "id": 9496,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_burn",
            "nameLocation": "3459:5:50",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9486,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 9484,
                  "name": "ERC20",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2806,
                  "src": "3532:5:50"
                },
                {
                  "id": 9485,
                  "name": "ERC20Votes",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3565,
                  "src": "3539:10:50"
                }
              ],
              "src": "3523:27:50"
            },
            "parameters": {
              "id": 9483,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9480,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "3473:7:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9496,
                  "src": "3465:15:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9479,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3465:7:50",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9482,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "3490:6:50",
                  "nodeType": "VariableDeclaration",
                  "scope": 9496,
                  "src": "3482:14:50",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9481,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3482:7:50",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3464:33:50"
            },
            "returnParameters": {
              "id": 9487,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3555:0:50"
            },
            "scope": 9497,
            "src": "3450:150:50",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 9498,
        "src": "520:3082:50",
        "usedErrors": []
      }
    ],
    "src": "38:3565:50"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.11+commit.d7f03943.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.4",
  "updatedAt": "2022-03-07T00:41:22.492Z",
  "networkType": "ethereum",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "DOMAIN_SEPARATOR()": {
        "details": "See {IERC20Permit-DOMAIN_SEPARATOR}."
      },
      "allowance(address,address)": {
        "details": "See {IERC20-allowance}."
      },
      "approve(address,uint256)": {
        "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."
      },
      "balanceOf(address)": {
        "details": "See {IERC20-balanceOf}."
      },
      "burn(uint256)": {
        "details": "Destroys `amount` tokens from the caller. See {ERC20-_burn}."
      },
      "burnFrom(address,uint256)": {
        "details": "Destroys `amount` tokens from `account`, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for ``accounts``'s tokens of at least `amount`."
      },
      "cap()": {
        "details": "Returns the cap on the token's total supply."
      },
      "checkpoints(address,uint32)": {
        "details": "Get the `pos`-th checkpoint for `account`."
      },
      "decimals()": {
        "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
      },
      "decreaseAllowance(address,uint256)": {
        "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
      },
      "decreaseCap(uint256)": {
        "details": "Decrease the cap supply"
      },
      "delegate(address)": {
        "details": "Delegate votes from the sender to `delegatee`."
      },
      "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": {
        "details": "Delegates votes from signer to `delegatee`"
      },
      "delegates(address)": {
        "details": "Get the address `account` is currently delegating to."
      },
      "getPastTotalSupply(uint256)": {
        "details": "Retrieve the `totalSupply` at the end of `blockNumber`. Note, this value is the sum of all balances. It is but NOT the sum of all the delegated votes! Requirements: - `blockNumber` must have been already mined"
      },
      "getPastVotes(address,uint256)": {
        "details": "Retrieve the number of votes for `account` at the end of `blockNumber`. Requirements: - `blockNumber` must have been already mined"
      },
      "getRoleAdmin(bytes32)": {
        "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."
      },
      "getVotes(address)": {
        "details": "Gets the current votes balance for `account`"
      },
      "grantRole(bytes32,address)": {
        "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role."
      },
      "hasRole(bytes32,address)": {
        "details": "Returns `true` if `account` has been granted `role`."
      },
      "increaseAllowance(address,uint256)": {
        "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
      },
      "increaseCap(uint256)": {
        "details": "Increase the cap supply"
      },
      "name()": {
        "details": "Returns the name of the token."
      },
      "nonces(address)": {
        "details": "See {IERC20Permit-nonces}."
      },
      "numCheckpoints(address)": {
        "details": "Get number of checkpoints for `account`."
      },
      "paused()": {
        "details": "Returns true if the contract is paused, and false otherwise."
      },
      "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": {
        "details": "See {IERC20Permit-permit}."
      },
      "renounceRole(bytes32,address)": {
        "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`."
      },
      "revokeRole(bytes32,address)": {
        "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role."
      },
      "setCap(uint256)": {
        "details": "Set new cap supply"
      },
      "supportsInterface(bytes4)": {
        "details": "See {IERC165-supportsInterface}."
      },
      "symbol()": {
        "details": "Returns the symbol of the token, usually a shorter version of the name."
      },
      "totalSupply()": {
        "details": "See {IERC20-totalSupply}."
      },
      "transfer(address,uint256)": {
        "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."
      },
      "transferFrom(address,address,uint256)": {
        "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}