{
  "contractName": "PercentageERC20FeeHandler",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "bridgeAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "feeHandlerRouterAddress",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "IncorrectFeeSupplied",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddress",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newLowerBound",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newUpperBound",
          "type": "uint256"
        }
      ],
      "name": "FeeBoundsChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newFee",
          "type": "uint256"
        }
      ],
      "name": "FeeChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "fromDomainID",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "destinationDomainID",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "name": "FeeCollected",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "FeeDistributed",
      "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"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "HUNDRED_PERCENT",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "_bridgeAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "_domainResourceIDToFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "_feeHandlerRouterAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "_resourceIDToFeeBounds",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "lowerBound",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "upperBound",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "destinationDomainID",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "newFee",
          "type": "uint256"
        }
      ],
      "name": "changeFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getRoleMember",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleMemberCount",
      "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": "getRoleMemberIndex",
      "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": "newAdmin",
          "type": "address"
        }
      ],
      "name": "renounceAdmin",
      "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": "address payable[]",
          "name": "addrs",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "name": "transferFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeHandlerType",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "fromDomainID",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "destinationDomainID",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "depositData",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "feeData",
          "type": "bytes"
        }
      ],
      "name": "calculateFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "fromDomainID",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "destinationDomainID",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "depositData",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "feeData",
          "type": "bytes"
        }
      ],
      "name": "collectFee",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function",
      "payable": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "uint128",
          "name": "newLowerBound",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "newUpperBound",
          "type": "uint128"
        }
      ],
      "name": "changeFeeBounds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "address[]",
          "name": "addrs",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "name": "transferERC20Fee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridgeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeHandlerRouterAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"IncorrectFeeSupplied\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newLowerBound\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newUpperBound\",\"type\":\"uint256\"}],\"name\":\"FeeBoundsChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newFee\",\"type\":\"uint256\"}],\"name\":\"FeeChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"fromDomainID\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"destinationDomainID\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"FeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FeeDistributed\",\"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\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HUNDRED_PERCENT\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_bridgeAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"_domainResourceIDToFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_feeHandlerRouterAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"_resourceIDToFeeBounds\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"lowerBound\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"upperBound\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"fromDomainID\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"destinationDomainID\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"depositData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"feeData\",\"type\":\"bytes\"}],\"name\":\"calculateFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"destinationDomainID\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newFee\",\"type\":\"uint256\"}],\"name\":\"changeFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"newLowerBound\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"newUpperBound\",\"type\":\"uint128\"}],\"name\":\"changeFeeBounds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"fromDomainID\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"destinationDomainID\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"depositData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"feeData\",\"type\":\"bytes\"}],\"name\":\"collectFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeHandlerType\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getRoleMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleMemberCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getRoleMemberIndex\",\"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\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"renounceAdmin\",\"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\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"addrs\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"transferERC20Fee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable[]\",\"name\":\"addrs\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"transferFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"ChainSafe Systems.\",\"kind\":\"dev\",\"methods\":{\"calculateFee(address,uint8,uint8,bytes32,bytes,bytes)\":{\"params\":{\"depositData\":\"Additional data about the deposit.\",\"destinationDomainID\":\"ID of chain deposit will be bridged to.\",\"feeData\":\"Additional data to be passed to the fee handler.\",\"fromDomainID\":\"ID of the source chain.\",\"resourceID\":\"ResourceID to be used when making deposits.\",\"sender\":\"Sender of the deposit.\"},\"returns\":{\"fee\":\"Returns the fee amount.\",\"tokenAddress\":\"Returns the address of the token to be used for fee.\"}},\"changeFee(uint8,bytes32,uint256)\":{\"params\":{\"destinationDomainID\":\"ID of chain fee will be set.\",\"newFee\":\"Value to which fee will be updated to for the provided {destinationDomainID} and {resourceID}.\",\"resourceID\":\"ResourceID for which fee will be set.\"}},\"changeFeeBounds(bytes32,uint128,uint128)\":{\"params\":{\"newLowerBound\":\"Value {_newLowerBound} will be updated to.\",\"newUpperBound\":\"Value {_newUpperBound} will be updated to.\",\"resourceID\":\"ResourceID for which new fee bounds will be set.\"}},\"collectFee(address,uint8,uint8,bytes32,bytes,bytes)\":{\"params\":{\"depositData\":\"Additional data about the deposit.\",\"destinationDomainID\":\"ID of chain deposit will be bridged to.\",\"feeData\":\"Additional data to be passed to the fee handler.\",\"fromDomainID\":\"ID of the source chain.\",\"resourceID\":\"ResourceID to be used when making deposits.\",\"sender\":\"Sender of the deposit.\"}},\"constructor\":{\"params\":{\"bridgeAddress\":\"Contract address of previously deployed Bridge.\",\"feeHandlerRouterAddress\":\"Contract address of previously deployed FeeHandlerRouter.\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getRoleMember(bytes32,uint256)\":{\"details\":\"Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information.\"},\"getRoleMemberCount(bytes32)\":{\"details\":\"Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role.\"},\"getRoleMemberIndex(bytes32,address)\":{\"details\":\"Returns the index of the account that have `role`.\"},\"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`.\"},\"renounceAdmin(address)\":{\"params\":{\"newAdmin\":\"Address that admin role will be granted to.\"}},\"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 granted `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.\"},\"transferERC20Fee(bytes32,address[],uint256[])\":{\"params\":{\"addrs\":\"Array of addresses to transfer {amounts} to.\",\"amounts\":\"Array of amounts to transfer to {addrs}.\",\"resourceID\":\"ResourceID of the token.\"}},\"transferFee(address[],uint256[])\":{\"params\":{\"addrs\":\"Array of addresses to transfer {amounts} to.\",\"amounts\":\"Array of amounts to transfer to {addrs}.\"}}},\"title\":\"Handles deposit fees.\",\"version\":1},\"userdoc\":{\"events\":{\"FeeCollected(address,uint8,uint8,bytes32,uint256,address)\":{\"notice\":\"This event is emitted when the fee is collected.\"},\"FeeDistributed(address,address,uint256)\":{\"notice\":\"This event is emitted when the fee is distributed to an address.\"}},\"kind\":\"user\",\"methods\":{\"calculateFee(address,uint8,uint8,bytes32,bytes,bytes)\":{\"notice\":\"Calculates fee for deposit.\"},\"changeFee(uint8,bytes32,uint256)\":{\"notice\":\"Maps the {newFee} to {destinationDomainID} to {resourceID} in {_domainResourceIDToFee}.Only callable by admin.\"},\"changeFeeBounds(bytes32,uint128,uint128)\":{\"notice\":\"Sets new value for lower and upper fee bounds, both are in token amount.Only callable by admin.\"},\"collectFee(address,uint8,uint8,bytes32,bytes,bytes)\":{\"notice\":\"Collects fee for deposit.\"},\"feeHandlerType()\":{\"notice\":\"Getter function for fee handler type\"},\"renounceAdmin(address)\":{\"notice\":\"Removes admin role from {_msgSender()} and grants it to {newAdmin}.Only callable by an address that currently has the admin role.\"},\"transferERC20Fee(bytes32,address[],uint256[])\":{\"notice\":\"Transfers tokens from the contract to the specified addresses. The parameters addrs and amounts are mapped 1-1. This means that the address at index 0 for addrs will receive the amount of tokens from amounts at index 0.\"},\"transferFee(address[],uint256[])\":{\"notice\":\"Transfers eth in the contract to the specified addresses. The parameters addrs and amounts are mapped 1-1. This means that the address at index 0 for addrs will receive the amount (in WEI) from amounts at index 0.\"}},\"notice\":\"This contract is intended to be used with the Bridge contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/handlers/fee/PercentageERC20FeeHandler.sol\":\"PercentageERC20FeeHandler\"},\"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/AccessControlEnumerable.sol\":{\"keccak256\":\"0x13f5e15f2a0650c0b6aaee2ef19e89eaf4870d6e79662d572a393334c1397247\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ee05f28f549a5d6515e152580716b87636ed4bfab9812499a6e3803df88288b\",\"dweb:/ipfs/QmeEnhdwY1t5Y3YU5a4ffzgXuToydH2PNdNxV9W7dEPRQJ\"]},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bb2c137c343ef0c4c7ce7b18c1d108afdc9d315a04e48307288d2d05adcbde3a\",\"dweb:/ipfs/QmUxhrAQM3MM3FF5j7AtcXLXguWCJBHJ14BRdVtuoQc8Fh\"]},\"@openzeppelin/contracts/access/IAccessControlEnumerable.sol\":{\"keccak256\":\"0xba4459ab871dfa300f5212c6c30178b63898c03533a1ede28436f11546626676\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dcc7b09bfa6e18aab262ca372f4a9b1fc82e294b430706a4e1378cf58e6a276\",\"dweb:/ipfs/QmT8oSAcesdctR15HMLhr2a1HRpXymxdjTfdtfTYJcj2N2\"]},\"@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/ERC20Pausable.sol\":{\"keccak256\":\"0x978847fbff92d66d27d8767402a90ba996970b1936b372406aa17f5492bd8dc5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1414cb92779420b50d3e796b47bad6ea800ef1805bc6f9bf35a3ccb4e17db3dc\",\"dweb:/ipfs/QmaMzwYqLiivfaWSgqeaAPboBtJjVD1hSrH48p7ExJZ7DG\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"@openzeppelin/contracts/token/ERC20/presets/ERC20PresetMinterPauser.sol\":{\"keccak256\":\"0x2cd54808b851c4db22f459065af0b7a952262741a85a73923e7a660767cd7baa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://750c4a78e953fe92317bba7166afd0a4b7725723e5822ea1b92ffd4e72d2d36b\",\"dweb:/ipfs/QmZNyCSrdYXGQfmB6LkbX8R6y4gGZRNh1d2pJobYBpkaRF\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x2ccf9d2313a313d41a791505f2b5abfdc62191b5d4334f7f7a82691c088a1c87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3a57d0854b2fdce6ebff933a48dca2445643d1eccfc27f00292e937f26c6a58\",\"dweb:/ipfs/QmW45rZooS9TqR4YXUbjRbtf2Bpb5ouSarBvfW1LdGprvV\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x32c202bd28995dd20c4347b7c6467a6d3241c74c8ad3edcbb610cd9205916c45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8179c356adb19e70d6b31a1eedc8c5c7f0c00e669e2540f4099e3844c6074d30\",\"dweb:/ipfs/QmWFbivarEobbqhS1go64ootVuHfVohBseerYy9FTEd1W2\"]},\"@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/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9772845c886f87a3aab315f8d6b68aa599027c20f441b131cd4afaf65b588900\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad2f29a9c17a4f746416c9e254e17671f43c409dbfa6e4d7d76c3e4a83212d31\",\"dweb:/ipfs/QmTqU65L6iu6yqmXKzcNLPioR8etzKPWycpDJCm17ifVdS\"]},\"project:/contracts/ERC20Safe.sol\":{\"keccak256\":\"0xad4cda144873e4b0159b7c60f7edd54ccc5d844d846bcaf7cffa44d829597f61\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://526d71e89833a47920ece8446f5260cd265189e2303606c0a27c320b2b59e0dc\",\"dweb:/ipfs/QmULfek9aZMYJbynCWeQ1UqxxJBLkbxUxoXjMJmdhuZXhs\"]},\"project:/contracts/handlers/FeeHandlerRouter.sol\":{\"keccak256\":\"0x8c4c094e60ddda1f6e6baf5ebf4cf5566f6e14c4a89d4542a11a003896d4fc4e\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://bc29d335b79f7d780f88f39177bc29e3db77dde9647edfdde31c3d39ae983c00\",\"dweb:/ipfs/QmRh1ZVMUHZUL5KNHfZGzSWoUZThV6kCS7SnvSDPgpHqhC\"]},\"project:/contracts/handlers/fee/BasicFeeHandler.sol\":{\"keccak256\":\"0x6fb7a71c8a0e29eb7ffc02efcd0f5057e4431ebf18b2d3c417174c26341aa5c6\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://513d8cdbba54a462bdf191dbb4ccbfc2162e28202059c3e4e056752b6c9b1218\",\"dweb:/ipfs/QmcpurqjhvhV7VgPLU5zHneLBDWfjDLQw53LbyvJrhQyfS\"]},\"project:/contracts/handlers/fee/PercentageERC20FeeHandler.sol\":{\"keccak256\":\"0x0d659aea83bb0d70702076c8e6319488177e134df8f510d4815eebc4343369c5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://389bd854b584024724866890b6241502e37dd8e0993e8364ccda75cfda8f657e\",\"dweb:/ipfs/Qmb1ZiJheMADY7pGBWoCcji8YQUJcRvBsuMUoQhfCwzCV1\"]},\"project:/contracts/interfaces/IBridge.sol\":{\"keccak256\":\"0x613f3a2a8156e8de182812fba42380ec873af6b5716405b1d4a9d9b39e31133a\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://b254a578f4524a5a04dee112456286ef86a4b77219a034123ae1d6833c3c0926\",\"dweb:/ipfs/QmPGtxJSXzVNc39qpzzn69Ks9QpaM48sscWbRS6ntZE7S1\"]},\"project:/contracts/interfaces/IERCHandler.sol\":{\"keccak256\":\"0xf360099ea5a64a9ba351b0807e0bf376c432239af1cc314ef2e44b157afe56fd\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://3b05bd76975b1d128c7b1c8ed93cf35c532737b84807605320a41f193c0e00ef\",\"dweb:/ipfs/QmNQLZWyPb2Nd3JmPaDN5rPyvFzcMtuW9xgp8a7hmgPsUo\"]},\"project:/contracts/interfaces/IFeeHandler.sol\":{\"keccak256\":\"0xb91ebf155a2ec6e36d2e5f884f829075cff788aaa367d6ffb09d3f956cb5384a\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://102bea5ee61e82b2ed2c0db49dac1bfda190fde61ec25cc8d5988d1aad496e9b\",\"dweb:/ipfs/QmUonDedQaYyP5pz71JvmzMm9f9wg96ZpCYowSr9RMKs1U\"]},\"project:/contracts/utils/AccessControl.sol\":{\"keccak256\":\"0x46ee81e56b1cca67473670a3f59fb02ec8abda297fac02c79d705a3442588499\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40869a99895bc5f746f8b55ab7d20eb4fce323e50540d2d0944e1930f5eea334\",\"dweb:/ipfs/QmVaCmqGRywSFyqPj1auXmDYQzDFy4uywknXTB3QMLCzkm\"]},\"project:/contracts/utils/SanityChecks.sol\":{\"keccak256\":\"0xe0a497950a5f1f9e127a5684c6c562e6fb0fa72dcde056b8c6da933e6bf8afc2\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://47e5918856c922f1408cd15660d451062820121bd1ef3057d1dccad9f9785241\",\"dweb:/ipfs/QmZUEfFPEtiRKnfAUGhN6HoWCyLLUs9XgJbmqEq7pbABHq\"]}},\"version\":1}",
  "bytecode": "0x60c06040523480156200001157600080fd5b5060405162001efe38038062001efe833981016040819052620000349162000166565b6001600160a01b03808316608052811660a05281816200005660003362000060565b505050506200019e565b6200006c828262000070565b5050565b6000828152602081815260409091206200009591839062001044620000d7821b17901c565b156200006c5760405133906001600160a01b0383169084907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d90600090a45050565b6000620000ee836001600160a01b038416620000f7565b90505b92915050565b60008181526001830160205260408120546200014057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620000f1565b506000620000f1565b80516001600160a01b03811681146200016157600080fd5b919050565b600080604083850312156200017a57600080fd5b620001858362000149565b9150620001956020840162000149565b90509250929050565b60805160a051611d1e620001e06000396000818161030e01526110960152600081816101c401528181610b990152818161106401526111220152611d1e6000f3fe6080604052600436106101355760003560e01c8063769d4643116100ab578063abc9db0b1161006f578063abc9db0b14610416578063ca15c87314610436578063d48f953414610456578063d4e6bc9614610476578063d547741f14610496578063ef4f081f146104b657600080fd5b8063769d4643146103305780639010d07c14610391578063904e9b2b146103b157806391d14854146103d1578063a217fddf1461040157600080fd5b80634e0df3f6116100fd5780634e0df3f61461021e578063542774b51461023e5780635e1fab0f14610277578063632d589c146102975780636ed93dd0146102cf578063745e6b61146102fc57600080fd5b8063248a9ca31461013a578063253070651461017d5780632f2ff15d14610192578063318c136e146101b257806336568abe146101fe575b600080fd5b34801561014657600080fd5b5061016a6101553660046117bb565b60009081526020819052604090206002015490565b6040519081526020015b60405180910390f35b61019061018b36600461184b565b6104f3565b005b34801561019e57600080fd5b506101906101ad3660046118f8565b6105df565b3480156101be57600080fd5b506101e67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610174565b34801561020a57600080fd5b506101906102193660046118f8565b61066d565b34801561022a57600080fd5b5061016a6102393660046118f8565b6106e7565b34801561024a57600080fd5b50604080518082018252600a81526970657263656e7461676560b01b602082015290516101749190611954565b34801561028357600080fd5b50610190610292366004611987565b610712565b3480156102a357600080fd5b5061016a6102b23660046119a4565b600160209081526000928352604080842090915290825290205481565b3480156102db57600080fd5b506102e76305f5e10081565b60405163ffffffff9091168152602001610174565b34801561030857600080fd5b506101e67f000000000000000000000000000000000000000000000000000000000000000081565b34801561033c57600080fd5b5061037161034b3660046117bb565b6002602052600090815260409020546001600160801b0380821691600160801b90041682565b604080516001600160801b03938416815292909116602083015201610174565b34801561039d57600080fd5b506101e66103ac3660046119ce565b610782565b3480156103bd57600080fd5b506101906103cc366004611a35565b6107a1565b3480156103dd57600080fd5b506103f16103ec3660046118f8565b6109ef565b6040519015158152602001610174565b34801561040d57600080fd5b5061016a600081565b34801561042257600080fd5b50610190610431366004611aa1565b610a07565b34801561044257600080fd5b5061016a6104513660046117bb565b610af3565b34801561046257600080fd5b50610190610471366004611ad4565b610b0a565b34801561048257600080fd5b50610190610491366004611b65565b610d9b565b3480156104a257600080fd5b506101906104b13660046118f8565b610f9f565b3480156104c257600080fd5b506104d66104d136600461184b565b611020565b604080519283526001600160a01b03909116602083015201610174565b6104fb611059565b341561054e5760405162461bcd60e51b815260206004820152601a60248201527f636f6c6c6563744665653a206d73672e76616c756520213d203000000000000060448201526064015b60405180910390fd5b6000806105618a8a8a8a8a8a8a8a61111b565b91509150610571818b3085611312565b604080516001600160a01b038c8116825260ff8c811660208401528b1682840152606082018a905260808201859052831660a082015290517fbd231b7fa4103e15e7a238c72f07e8aff310701af121895aa6c793b80245e4339181900360c00190a150505050505050505050565b6000828152602081905260409020600201546105fb90336109ef565b61065f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b6064820152608401610545565b610669828261131f565b5050565b6001600160a01b03811633146106dd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610545565b6106698282611378565b6000828152602081815260408083206001600160a01b03851684526001019091529020545b92915050565b336001600160a01b03821681141561076c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f742072656e6f756e6365206f6e6573656c660000000000000000006044820152606401610545565b6107776000836105df565b61066960008261066d565b600082815260208190526040812061079a90836113d1565b9392505050565b6107ac6000336109ef565b6107c85760405162461bcd60e51b815260040161054590611ba1565b8281146108175760405162461bcd60e51b815260206004820152601f60248201527f61646472735b5d2c20616d6f756e74735b5d3a2064696666206c656e677468006044820152606401610545565b60005b838110156109e85761085a85858381811061083757610837611bd8565b905060200201602081019061084c9190611987565b6001600160a01b03166113dd565b50600085858381811061086f5761086f611bd8565b90506020020160208101906108849190611987565b6001600160a01b031684848481811061089f5761089f611bd8565b9050602002013560405160006040518083038185875af1925050503d80600081146108e6576040519150601f19603f3d011682016040523d82523d6000602084013e6108eb565b606091505b505090508061093c5760405162461bcd60e51b815260206004820152601960248201527f466565206574686572207472616e73666572206661696c6564000000000000006044820152606401610545565b7faaa40a232aaf133fdd28f3485f6fdd163514cfadbffa981f3610f42398efe34b600087878581811061097157610971611bd8565b90506020020160208101906109869190611987565b86868681811061099857610998611bd8565b905060200201356040516109cd939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405180910390a150806109e081611c04565b91505061081a565b5050505050565b600082815260208190526040812061079a908361140a565b610a126000336109ef565b610a2e5760405162461bcd60e51b815260040161054590611ba1565b60ff8316600090815260016020908152604080832085845290915290205481811415610a9c5760405162461bcd60e51b815260206004820152601f60248201527f43757272656e742066656520697320657175616c20746f206e657720666565006044820152606401610545565b60ff8416600090815260016020908152604080832086845282529182902084905590518381527f6bbc57480a46553fa4d156ce702beef5f3ad66303b0ed1a5d4cb44966c6584c3910160405180910390a150505050565b600081815260208190526040812061070c9061142c565b610b156000336109ef565b610b315760405162461bcd60e51b815260040161054590611ba1565b828114610b805760405162461bcd60e51b815260206004820152601f60248201527f61646472735b5d2c20616d6f756e74735b5d3a2064696666206c656e677468006044820152606401610545565b6040516384db809f60e01b8152600481018690526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906384db809f90602401602060405180830381865afa158015610be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0c9190611c1f565b60405163014daabb60e31b8152600481018890529091506000906001600160a01b03831690630a6d55d890602401602060405180830381865afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b9190611c1f565b905060005b85811015610d9157610c9d87878381811061083757610837611bd8565b50610ce782888884818110610cb457610cb4611bd8565b9050602002016020810190610cc99190611987565b878785818110610cdb57610cdb611bd8565b90506020020135611436565b7faaa40a232aaf133fdd28f3485f6fdd163514cfadbffa981f3610f42398efe34b82888884818110610d1b57610d1b611bd8565b9050602002016020810190610d309190611987565b878785818110610d4257610d42611bd8565b90506020020135604051610d77939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405180910390a180610d8981611c04565b915050610c80565b5050505050505050565b610da66000336109ef565b610dc25760405162461bcd60e51b815260040161054590611ba1565b6001600160801b0381161580610de95750816001600160801b0316816001600160801b0316115b610e4e5760405162461bcd60e51b815260206004820152603060248201527f557070657220626f756e64206d757374206265206c6172676572207468616e2060448201526f06c6f77657220626f756e64206f7220360841b6064820152608401610545565b6000838152600260209081526040918290208251808401909352546001600160801b03808216808552600160801b909204811692840192909252908416141580610eae5750816001600160801b031681602001516001600160801b031614155b610f095760405162461bcd60e51b815260206004820152602660248201527f43757272656e7420626f756e64732061726520657175616c20746f206e657720604482015265626f756e647360d01b6064820152608401610545565b6040805180820182526001600160801b038086168252848116602080840191825260008981526002909152849020835191518316600160801b029190921617905590517f25fb75f58179b90390cb00fe98bf5bdaa0e9d22f0e1f15bd3695c34c281647f890610f9090869086906001600160801b0392831681529116602082015260400190565b60405180910390a15050505050565b600082815260208190526040902060020154610fbb90336109ef565b6106dd5760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b6064820152608401610545565b6000806110338a8a8a8a8a8a8a8a61111b565b915091509850989650505050505050565b600061079a836001600160a01b038416611448565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110b85750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6111195760405162461bcd60e51b815260206004820152602c60248201527f73656e646572206d75737420626520627269646765206f722066656520726f7560448201526b1d195c8818dbdb9d1c9858dd60a21b6064820152608401610545565b565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166384db809f896040518263ffffffff1660e01b815260040161116e91815260200190565b602060405180830381865afa15801561118b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111af9190611c1f565b60405163014daabb60e31b8152600481018a90529091506001600160a01b03821690630a6d55d890602401602060405180830381865afa1580156111f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121b9190611c1f565b60008981526002602090815260408083208151808301909252546001600160801b038082168352600160801b9091041691810191909152919350611261888a018a6117bb565b60ff8c1660009081526001602090815260408083208e84529091529020549091506305f5e100906112929083611c3c565b61129c9190611c5b565b82519095506001600160801b03168510156112c35781516001600160801b03169450611302565b81602001516001600160801b0316851180156112ec5750600082602001516001600160801b0316115b156113025781602001516001600160801b031694505b5050509850989650505050505050565b836109e881858585611497565b60008281526020819052604090206113379082611044565b156106695760405133906001600160a01b0383169084907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d90600090a45050565b60008281526020819052604090206113909082611502565b156106695760405133906001600160a01b0383169084907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b90600090a45050565b600061079a8383611517565b60006001600160a01b0382166114065760405163d92e233d60e01b815260040160405180910390fd5b5090565b6001600160a01b0381166000908152600183016020526040812054151561079a565b600061070c825490565b82611442818484611541565b50505050565b600081815260018301602052604081205461148f5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561070c565b50600061070c565b6040516001600160a01b03808516602483015283166044820152606481018290526114429085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611576565b600061079a836001600160a01b0384166116c8565b600082600001828154811061152e5761152e611bd8565b9060005260206000200154905092915050565b6040516001600160a01b03831660248201526044810182905261157190849063a9059cbb60e01b906064016114cb565b505050565b813b806115bd5760405162461bcd60e51b8152602060048201526015602482015274115490cc8c0e881b9bdd08184818dbdb9d1c9858dd605a1b6044820152606401610545565b600080846001600160a01b0316846040516115d89190611c7d565b6000604051808303816000865af19150503d8060008114611615576040519150601f19603f3d011682016040523d82523d6000602084013e61161a565b606091505b5091509150816116615760405162461bcd60e51b8152602060048201526012602482015271115490cc8c0e8818d85b1b0819985a5b195960721b6044820152606401610545565b8051156109e8578080602001905181019061167c9190611c99565b6109e85760405162461bcd60e51b815260206004820181905260248201527f45524332303a206f7065726174696f6e20646964206e6f7420737563636565646044820152606401610545565b600081815260018301602052604081205480156117b15760006116ec600183611cbb565b855490915060009061170090600190611cbb565b905081811461176557600086600001828154811061172057611720611bd8565b906000526020600020015490508087600001848154811061174357611743611bd8565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061177657611776611cd2565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061070c565b600091505061070c565b6000602082840312156117cd57600080fd5b5035919050565b6001600160a01b03811681146117e957600080fd5b50565b803560ff811681146117fd57600080fd5b919050565b60008083601f84011261181457600080fd5b50813567ffffffffffffffff81111561182c57600080fd5b60208301915083602082850101111561184457600080fd5b9250929050565b60008060008060008060008060c0898b03121561186757600080fd5b8835611872816117d4565b975061188060208a016117ec565b965061188e60408a016117ec565b955060608901359450608089013567ffffffffffffffff808211156118b257600080fd5b6118be8c838d01611802565b909650945060a08b01359150808211156118d757600080fd5b506118e48b828c01611802565b999c989b5096995094979396929594505050565b6000806040838503121561190b57600080fd5b82359150602083013561191d816117d4565b809150509250929050565b60005b8381101561194357818101518382015260200161192b565b838111156114425750506000910152565b6020815260008251806020840152611973816040850160208701611928565b601f01601f19169190910160400192915050565b60006020828403121561199957600080fd5b813561079a816117d4565b600080604083850312156119b757600080fd5b6119c0836117ec565b946020939093013593505050565b600080604083850312156119e157600080fd5b50508035926020909101359150565b60008083601f840112611a0257600080fd5b50813567ffffffffffffffff811115611a1a57600080fd5b6020830191508360208260051b850101111561184457600080fd5b60008060008060408587031215611a4b57600080fd5b843567ffffffffffffffff80821115611a6357600080fd5b611a6f888389016119f0565b90965094506020870135915080821115611a8857600080fd5b50611a95878288016119f0565b95989497509550505050565b600080600060608486031215611ab657600080fd5b611abf846117ec565b95602085013595506040909401359392505050565b600080600080600060608688031215611aec57600080fd5b85359450602086013567ffffffffffffffff80821115611b0b57600080fd5b611b1789838a016119f0565b90965094506040880135915080821115611b3057600080fd5b50611b3d888289016119f0565b969995985093965092949392505050565b80356001600160801b03811681146117fd57600080fd5b600080600060608486031215611b7a57600080fd5b83359250611b8a60208501611b4e565b9150611b9860408501611b4e565b90509250925092565b6020808252601e908201527f73656e64657220646f65736e277420686176652061646d696e20726f6c650000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611c1857611c18611bee565b5060010190565b600060208284031215611c3157600080fd5b815161079a816117d4565b6000816000190483118215151615611c5657611c56611bee565b500290565b600082611c7857634e487b7160e01b600052601260045260246000fd5b500490565b60008251611c8f818460208701611928565b9190910192915050565b600060208284031215611cab57600080fd5b8151801515811461079a57600080fd5b600082821015611ccd57611ccd611bee565b500390565b634e487b7160e01b600052603160045260246000fdfea264697066735822122040fd0c0eed31d80f087badf313534eaa84a557d64f1059544c0883ecd8b9194864736f6c634300080b0033",
  "deployedBytecode": "0x6080604052600436106101355760003560e01c8063769d4643116100ab578063abc9db0b1161006f578063abc9db0b14610416578063ca15c87314610436578063d48f953414610456578063d4e6bc9614610476578063d547741f14610496578063ef4f081f146104b657600080fd5b8063769d4643146103305780639010d07c14610391578063904e9b2b146103b157806391d14854146103d1578063a217fddf1461040157600080fd5b80634e0df3f6116100fd5780634e0df3f61461021e578063542774b51461023e5780635e1fab0f14610277578063632d589c146102975780636ed93dd0146102cf578063745e6b61146102fc57600080fd5b8063248a9ca31461013a578063253070651461017d5780632f2ff15d14610192578063318c136e146101b257806336568abe146101fe575b600080fd5b34801561014657600080fd5b5061016a6101553660046117bb565b60009081526020819052604090206002015490565b6040519081526020015b60405180910390f35b61019061018b36600461184b565b6104f3565b005b34801561019e57600080fd5b506101906101ad3660046118f8565b6105df565b3480156101be57600080fd5b506101e67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610174565b34801561020a57600080fd5b506101906102193660046118f8565b61066d565b34801561022a57600080fd5b5061016a6102393660046118f8565b6106e7565b34801561024a57600080fd5b50604080518082018252600a81526970657263656e7461676560b01b602082015290516101749190611954565b34801561028357600080fd5b50610190610292366004611987565b610712565b3480156102a357600080fd5b5061016a6102b23660046119a4565b600160209081526000928352604080842090915290825290205481565b3480156102db57600080fd5b506102e76305f5e10081565b60405163ffffffff9091168152602001610174565b34801561030857600080fd5b506101e67f000000000000000000000000000000000000000000000000000000000000000081565b34801561033c57600080fd5b5061037161034b3660046117bb565b6002602052600090815260409020546001600160801b0380821691600160801b90041682565b604080516001600160801b03938416815292909116602083015201610174565b34801561039d57600080fd5b506101e66103ac3660046119ce565b610782565b3480156103bd57600080fd5b506101906103cc366004611a35565b6107a1565b3480156103dd57600080fd5b506103f16103ec3660046118f8565b6109ef565b6040519015158152602001610174565b34801561040d57600080fd5b5061016a600081565b34801561042257600080fd5b50610190610431366004611aa1565b610a07565b34801561044257600080fd5b5061016a6104513660046117bb565b610af3565b34801561046257600080fd5b50610190610471366004611ad4565b610b0a565b34801561048257600080fd5b50610190610491366004611b65565b610d9b565b3480156104a257600080fd5b506101906104b13660046118f8565b610f9f565b3480156104c257600080fd5b506104d66104d136600461184b565b611020565b604080519283526001600160a01b03909116602083015201610174565b6104fb611059565b341561054e5760405162461bcd60e51b815260206004820152601a60248201527f636f6c6c6563744665653a206d73672e76616c756520213d203000000000000060448201526064015b60405180910390fd5b6000806105618a8a8a8a8a8a8a8a61111b565b91509150610571818b3085611312565b604080516001600160a01b038c8116825260ff8c811660208401528b1682840152606082018a905260808201859052831660a082015290517fbd231b7fa4103e15e7a238c72f07e8aff310701af121895aa6c793b80245e4339181900360c00190a150505050505050505050565b6000828152602081905260409020600201546105fb90336109ef565b61065f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b6064820152608401610545565b610669828261131f565b5050565b6001600160a01b03811633146106dd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610545565b6106698282611378565b6000828152602081815260408083206001600160a01b03851684526001019091529020545b92915050565b336001600160a01b03821681141561076c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f742072656e6f756e6365206f6e6573656c660000000000000000006044820152606401610545565b6107776000836105df565b61066960008261066d565b600082815260208190526040812061079a90836113d1565b9392505050565b6107ac6000336109ef565b6107c85760405162461bcd60e51b815260040161054590611ba1565b8281146108175760405162461bcd60e51b815260206004820152601f60248201527f61646472735b5d2c20616d6f756e74735b5d3a2064696666206c656e677468006044820152606401610545565b60005b838110156109e85761085a85858381811061083757610837611bd8565b905060200201602081019061084c9190611987565b6001600160a01b03166113dd565b50600085858381811061086f5761086f611bd8565b90506020020160208101906108849190611987565b6001600160a01b031684848481811061089f5761089f611bd8565b9050602002013560405160006040518083038185875af1925050503d80600081146108e6576040519150601f19603f3d011682016040523d82523d6000602084013e6108eb565b606091505b505090508061093c5760405162461bcd60e51b815260206004820152601960248201527f466565206574686572207472616e73666572206661696c6564000000000000006044820152606401610545565b7faaa40a232aaf133fdd28f3485f6fdd163514cfadbffa981f3610f42398efe34b600087878581811061097157610971611bd8565b90506020020160208101906109869190611987565b86868681811061099857610998611bd8565b905060200201356040516109cd939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405180910390a150806109e081611c04565b91505061081a565b5050505050565b600082815260208190526040812061079a908361140a565b610a126000336109ef565b610a2e5760405162461bcd60e51b815260040161054590611ba1565b60ff8316600090815260016020908152604080832085845290915290205481811415610a9c5760405162461bcd60e51b815260206004820152601f60248201527f43757272656e742066656520697320657175616c20746f206e657720666565006044820152606401610545565b60ff8416600090815260016020908152604080832086845282529182902084905590518381527f6bbc57480a46553fa4d156ce702beef5f3ad66303b0ed1a5d4cb44966c6584c3910160405180910390a150505050565b600081815260208190526040812061070c9061142c565b610b156000336109ef565b610b315760405162461bcd60e51b815260040161054590611ba1565b828114610b805760405162461bcd60e51b815260206004820152601f60248201527f61646472735b5d2c20616d6f756e74735b5d3a2064696666206c656e677468006044820152606401610545565b6040516384db809f60e01b8152600481018690526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906384db809f90602401602060405180830381865afa158015610be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0c9190611c1f565b60405163014daabb60e31b8152600481018890529091506000906001600160a01b03831690630a6d55d890602401602060405180830381865afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b9190611c1f565b905060005b85811015610d9157610c9d87878381811061083757610837611bd8565b50610ce782888884818110610cb457610cb4611bd8565b9050602002016020810190610cc99190611987565b878785818110610cdb57610cdb611bd8565b90506020020135611436565b7faaa40a232aaf133fdd28f3485f6fdd163514cfadbffa981f3610f42398efe34b82888884818110610d1b57610d1b611bd8565b9050602002016020810190610d309190611987565b878785818110610d4257610d42611bd8565b90506020020135604051610d77939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405180910390a180610d8981611c04565b915050610c80565b5050505050505050565b610da66000336109ef565b610dc25760405162461bcd60e51b815260040161054590611ba1565b6001600160801b0381161580610de95750816001600160801b0316816001600160801b0316115b610e4e5760405162461bcd60e51b815260206004820152603060248201527f557070657220626f756e64206d757374206265206c6172676572207468616e2060448201526f06c6f77657220626f756e64206f7220360841b6064820152608401610545565b6000838152600260209081526040918290208251808401909352546001600160801b03808216808552600160801b909204811692840192909252908416141580610eae5750816001600160801b031681602001516001600160801b031614155b610f095760405162461bcd60e51b815260206004820152602660248201527f43757272656e7420626f756e64732061726520657175616c20746f206e657720604482015265626f756e647360d01b6064820152608401610545565b6040805180820182526001600160801b038086168252848116602080840191825260008981526002909152849020835191518316600160801b029190921617905590517f25fb75f58179b90390cb00fe98bf5bdaa0e9d22f0e1f15bd3695c34c281647f890610f9090869086906001600160801b0392831681529116602082015260400190565b60405180910390a15050505050565b600082815260208190526040902060020154610fbb90336109ef565b6106dd5760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b6064820152608401610545565b6000806110338a8a8a8a8a8a8a8a61111b565b915091509850989650505050505050565b600061079a836001600160a01b038416611448565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110b85750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b6111195760405162461bcd60e51b815260206004820152602c60248201527f73656e646572206d75737420626520627269646765206f722066656520726f7560448201526b1d195c8818dbdb9d1c9858dd60a21b6064820152608401610545565b565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166384db809f896040518263ffffffff1660e01b815260040161116e91815260200190565b602060405180830381865afa15801561118b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111af9190611c1f565b60405163014daabb60e31b8152600481018a90529091506001600160a01b03821690630a6d55d890602401602060405180830381865afa1580156111f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121b9190611c1f565b60008981526002602090815260408083208151808301909252546001600160801b038082168352600160801b9091041691810191909152919350611261888a018a6117bb565b60ff8c1660009081526001602090815260408083208e84529091529020549091506305f5e100906112929083611c3c565b61129c9190611c5b565b82519095506001600160801b03168510156112c35781516001600160801b03169450611302565b81602001516001600160801b0316851180156112ec5750600082602001516001600160801b0316115b156113025781602001516001600160801b031694505b5050509850989650505050505050565b836109e881858585611497565b60008281526020819052604090206113379082611044565b156106695760405133906001600160a01b0383169084907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d90600090a45050565b60008281526020819052604090206113909082611502565b156106695760405133906001600160a01b0383169084907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b90600090a45050565b600061079a8383611517565b60006001600160a01b0382166114065760405163d92e233d60e01b815260040160405180910390fd5b5090565b6001600160a01b0381166000908152600183016020526040812054151561079a565b600061070c825490565b82611442818484611541565b50505050565b600081815260018301602052604081205461148f5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561070c565b50600061070c565b6040516001600160a01b03808516602483015283166044820152606481018290526114429085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611576565b600061079a836001600160a01b0384166116c8565b600082600001828154811061152e5761152e611bd8565b9060005260206000200154905092915050565b6040516001600160a01b03831660248201526044810182905261157190849063a9059cbb60e01b906064016114cb565b505050565b813b806115bd5760405162461bcd60e51b8152602060048201526015602482015274115490cc8c0e881b9bdd08184818dbdb9d1c9858dd605a1b6044820152606401610545565b600080846001600160a01b0316846040516115d89190611c7d565b6000604051808303816000865af19150503d8060008114611615576040519150601f19603f3d011682016040523d82523d6000602084013e61161a565b606091505b5091509150816116615760405162461bcd60e51b8152602060048201526012602482015271115490cc8c0e8818d85b1b0819985a5b195960721b6044820152606401610545565b8051156109e8578080602001905181019061167c9190611c99565b6109e85760405162461bcd60e51b815260206004820181905260248201527f45524332303a206f7065726174696f6e20646964206e6f7420737563636565646044820152606401610545565b600081815260018301602052604081205480156117b15760006116ec600183611cbb565b855490915060009061170090600190611cbb565b905081811461176557600086600001828154811061172057611720611bd8565b906000526020600020015490508087600001848154811061174357611743611bd8565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061177657611776611cd2565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061070c565b600091505061070c565b6000602082840312156117cd57600080fd5b5035919050565b6001600160a01b03811681146117e957600080fd5b50565b803560ff811681146117fd57600080fd5b919050565b60008083601f84011261181457600080fd5b50813567ffffffffffffffff81111561182c57600080fd5b60208301915083602082850101111561184457600080fd5b9250929050565b60008060008060008060008060c0898b03121561186757600080fd5b8835611872816117d4565b975061188060208a016117ec565b965061188e60408a016117ec565b955060608901359450608089013567ffffffffffffffff808211156118b257600080fd5b6118be8c838d01611802565b909650945060a08b01359150808211156118d757600080fd5b506118e48b828c01611802565b999c989b5096995094979396929594505050565b6000806040838503121561190b57600080fd5b82359150602083013561191d816117d4565b809150509250929050565b60005b8381101561194357818101518382015260200161192b565b838111156114425750506000910152565b6020815260008251806020840152611973816040850160208701611928565b601f01601f19169190910160400192915050565b60006020828403121561199957600080fd5b813561079a816117d4565b600080604083850312156119b757600080fd5b6119c0836117ec565b946020939093013593505050565b600080604083850312156119e157600080fd5b50508035926020909101359150565b60008083601f840112611a0257600080fd5b50813567ffffffffffffffff811115611a1a57600080fd5b6020830191508360208260051b850101111561184457600080fd5b60008060008060408587031215611a4b57600080fd5b843567ffffffffffffffff80821115611a6357600080fd5b611a6f888389016119f0565b90965094506020870135915080821115611a8857600080fd5b50611a95878288016119f0565b95989497509550505050565b600080600060608486031215611ab657600080fd5b611abf846117ec565b95602085013595506040909401359392505050565b600080600080600060608688031215611aec57600080fd5b85359450602086013567ffffffffffffffff80821115611b0b57600080fd5b611b1789838a016119f0565b90965094506040880135915080821115611b3057600080fd5b50611b3d888289016119f0565b969995985093965092949392505050565b80356001600160801b03811681146117fd57600080fd5b600080600060608486031215611b7a57600080fd5b83359250611b8a60208501611b4e565b9150611b9860408501611b4e565b90509250925092565b6020808252601e908201527f73656e64657220646f65736e277420686176652061646d696e20726f6c650000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611c1857611c18611bee565b5060010190565b600060208284031215611c3157600080fd5b815161079a816117d4565b6000816000190483118215151615611c5657611c56611bee565b500290565b600082611c7857634e487b7160e01b600052601260045260246000fd5b500490565b60008251611c8f818460208701611928565b9190910192915050565b600060208284031215611cab57600080fd5b8151801515811461079a57600080fd5b600082821015611ccd57611ccd611bee565b500390565b634e487b7160e01b600052603160045260246000fdfea264697066735822122040fd0c0eed31d80f087badf313534eaa84a557d64f1059544c0883ecd8b9194864736f6c634300080b0033",
  "immutableReferences": {
    "16205": [
      {
        "length": 32,
        "start": 452
      },
      {
        "length": 32,
        "start": 2969
      },
      {
        "length": 32,
        "start": 4196
      },
      {
        "length": 32,
        "start": 4386
      }
    ],
    "16207": [
      {
        "length": 32,
        "start": 782
      },
      {
        "length": 32,
        "start": 4246
      }
    ]
  },
  "generatedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:491:105",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:105",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "74:117:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "84:22:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "99:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "93:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "93:13:105"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "84:5:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "169:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "178:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "181:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "171:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "171:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "171:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "128:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "139:5:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "154:3:105",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "159:1:105",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "150:3:105"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "150:11:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "163:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "146:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "146:19:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "135:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "135:31:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "125:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "125:42:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "118:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "118:50:105"
                  },
                  "nodeType": "YulIf",
                  "src": "115:70:105"
                }
              ]
            },
            "name": "abi_decode_address_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "53:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "64:5:105",
                "type": ""
              }
            ],
            "src": "14:177:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "294:195:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "340:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "349:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "352:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "342:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "342:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "342:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "315:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "324:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "311:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "311:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "336:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "307:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "307:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "304:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "365:50:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "405:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address_fromMemory",
                      "nodeType": "YulIdentifier",
                      "src": "375:29:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "375:40:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "365:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "424:59:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "468:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "479:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "464:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "464:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address_fromMemory",
                      "nodeType": "YulIdentifier",
                      "src": "434:29:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "434:49:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "424:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_address_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "252:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "263:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "275:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "283:6:105",
                "type": ""
              }
            ],
            "src": "196:293:105"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n    }\n}",
      "id": 105,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:18299:105",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:105",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "84:110:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "130:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "139:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "142:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "132:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "132:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "132:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "105:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "114:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "101:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "101:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "126:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "97:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "97:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "94:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "155:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "178:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "165:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "165:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "155:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "50:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "61:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "73:6:105",
                "type": ""
              }
            ],
            "src": "14:180:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "300:76:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "310:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "322:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "333:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "318:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "318:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "310:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "352:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "363:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "345:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "345:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "345:25:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "269:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "280:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "291:4:105",
                "type": ""
              }
            ],
            "src": "199:177:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "426:86:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "490:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "499:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "502:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "492:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "492:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "492:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "449:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "460:5:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "475:3:105",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "480:1:105",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "471:3:105"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "471:11:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "484:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "467:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "467:19:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "456:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "456:31:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "446:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "446:42:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "439:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "439:50:105"
                  },
                  "nodeType": "YulIf",
                  "src": "436:70:105"
                }
              ]
            },
            "name": "validator_revert_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "415:5:105",
                "type": ""
              }
            ],
            "src": "381:131:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "564:109:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "574:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "596:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "583:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "583:20:105"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "574:5:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "651:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "660:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "663:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "653:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "653:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "653:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "625:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "636:5:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "643:4:105",
                                "type": "",
                                "value": "0xff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "632:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "632:16:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "622:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "622:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "615:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "615:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "612:55:105"
                }
              ]
            },
            "name": "abi_decode_uint8",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "543:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "554:5:105",
                "type": ""
              }
            ],
            "src": "517:156:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "750:275:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "799:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "808:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "811:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "801:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "801:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "801:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "778:6:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "786:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "774:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "774:17:105"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "793:3:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "770:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "770:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "763:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "763:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "760:55:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "824:30:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "847:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "834:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "834:20:105"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "824:6:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "897:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "906:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "909:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "899:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "899:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "899:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "869:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "877:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "866:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "866:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "863:50:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "922:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "938:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "946:4:105",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "934:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "934:17:105"
                  },
                  "variableNames": [
                    {
                      "name": "arrayPos",
                      "nodeType": "YulIdentifier",
                      "src": "922:8:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1003:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1012:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1015:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1005:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1005:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1005:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "974:6:105"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "982:6:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "970:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "970:19:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "991:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "966:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "966:30:105"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "998:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "963:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "963:39:105"
                  },
                  "nodeType": "YulIf",
                  "src": "960:59:105"
                }
              ]
            },
            "name": "abi_decode_bytes_calldata",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "713:6:105",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "721:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "arrayPos",
                "nodeType": "YulTypedName",
                "src": "729:8:105",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "739:6:105",
                "type": ""
              }
            ],
            "src": "678:347:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1219:874:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1266:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1275:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1278:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1268:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1268:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1268:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1240:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1249:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1236:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1236:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1261:3:105",
                        "type": "",
                        "value": "192"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1232:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1232:33:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1229:53:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1291:36:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1317:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1304:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1304:23:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "1295:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "1361:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "1336:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1336:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1336:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1376:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "1386:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1376:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1400:46:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1431:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1442:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1427:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1427:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint8",
                      "nodeType": "YulIdentifier",
                      "src": "1410:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1410:36:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "1400:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1455:46:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1486:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1497:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1482:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1482:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint8",
                      "nodeType": "YulIdentifier",
                      "src": "1465:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1465:36:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "1455:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1510:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1537:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1548:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1533:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1533:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1520:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1520:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "1510:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1561:47:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1592:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1603:3:105",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1588:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1588:19:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1575:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1575:33:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "1565:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1617:28:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "1627:18:105",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "1621:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1672:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1681:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1684:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1674:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1674:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1674:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1660:6:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "1668:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1657:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1657:14:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1654:34:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1697:84:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1753:9:105"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "1764:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1749:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1749:22:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "1773:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "1723:25:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1723:58:105"
                  },
                  "variables": [
                    {
                      "name": "value4_1",
                      "nodeType": "YulTypedName",
                      "src": "1701:8:105",
                      "type": ""
                    },
                    {
                      "name": "value5_1",
                      "nodeType": "YulTypedName",
                      "src": "1711:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1790:18:105",
                  "value": {
                    "name": "value4_1",
                    "nodeType": "YulIdentifier",
                    "src": "1800:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "1790:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1817:18:105",
                  "value": {
                    "name": "value5_1",
                    "nodeType": "YulIdentifier",
                    "src": "1827:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value5",
                      "nodeType": "YulIdentifier",
                      "src": "1817:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1844:49:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1877:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1888:3:105",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1873:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1873:19:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1860:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1860:33:105"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "1848:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1922:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1931:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1934:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1924:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1924:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1924:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "1908:8:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "1918:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1905:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1905:16:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1902:36:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1947:86:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2003:9:105"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "2014:8:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1999:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1999:24:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "2025:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "1973:25:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1973:60:105"
                  },
                  "variables": [
                    {
                      "name": "value6_1",
                      "nodeType": "YulTypedName",
                      "src": "1951:8:105",
                      "type": ""
                    },
                    {
                      "name": "value7_1",
                      "nodeType": "YulTypedName",
                      "src": "1961:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2042:18:105",
                  "value": {
                    "name": "value6_1",
                    "nodeType": "YulIdentifier",
                    "src": "2052:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value6",
                      "nodeType": "YulIdentifier",
                      "src": "2042:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2069:18:105",
                  "value": {
                    "name": "value7_1",
                    "nodeType": "YulIdentifier",
                    "src": "2079:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value7",
                      "nodeType": "YulIdentifier",
                      "src": "2069:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_uint8t_uint8t_bytes32t_bytes_calldata_ptrt_bytes_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1129:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1140:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1152:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "1160:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "1168:6:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "1176:6:105",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "1184:6:105",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "1192:6:105",
                "type": ""
              },
              {
                "name": "value6",
                "nodeType": "YulTypedName",
                "src": "1200:6:105",
                "type": ""
              },
              {
                "name": "value7",
                "nodeType": "YulTypedName",
                "src": "1208:6:105",
                "type": ""
              }
            ],
            "src": "1030:1063:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2185:228:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2231:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2240:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2243:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2233:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2233:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2233:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2206:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2215:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2202:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2202:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2227:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2198:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2198:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "2195:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2256:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2279:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2266:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2266:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "2256:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2298:45:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2328:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2339:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2324:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2324:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2311:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2311:32:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "2302:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "2377:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "2352:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2352:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2352:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2392:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "2402:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "2392:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2143:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "2154:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2166:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2174:6:105",
                "type": ""
              }
            ],
            "src": "2098:315:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2519:102:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2529:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2541:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2552:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2537:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2537:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2529:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2571:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "2586:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2602:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2607:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "2598:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2598:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2611:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "2594:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2594:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "2582:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2582:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2564:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2564:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2564:51:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2488:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2499:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2510:4:105",
                "type": ""
              }
            ],
            "src": "2418:203:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2727:76:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2737:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2749:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2760:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2745:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2745:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2737:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2779:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "2790:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2772:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2772:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2772:25:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2696:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2707:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2718:4:105",
                "type": ""
              }
            ],
            "src": "2626:177:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2861:205:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2871:10:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "2880:1:105",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "2875:1:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2940:63:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "2965:3:105"
                                },
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "2970:1:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "2961:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2961:11:105"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "src",
                                      "nodeType": "YulIdentifier",
                                      "src": "2984:3:105"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "2989:1:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "2980:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "2980:11:105"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "2974:5:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2974:18:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "2954:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2954:39:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2954:39:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "2901:1:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "2904:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "2898:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2898:13:105"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "2912:19:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "2914:15:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "2923:1:105"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2926:2:105",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "2919:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2919:10:105"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "2914:1:105"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "2894:3:105",
                    "statements": []
                  },
                  "src": "2890:113:105"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3029:31:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "3042:3:105"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "3047:6:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3038:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3038:16:105"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3056:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3031:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3031:27:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3031:27:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "3018:1:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "3021:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "3015:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3015:13:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3012:48:105"
                }
              ]
            },
            "name": "copy_memory_to_memory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "2839:3:105",
                "type": ""
              },
              {
                "name": "dst",
                "nodeType": "YulTypedName",
                "src": "2844:3:105",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "2849:6:105",
                "type": ""
              }
            ],
            "src": "2808:258:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3192:262:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3209:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3220:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3202:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3202:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3202:21:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3232:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "3252:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "3246:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3246:13:105"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "3236:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3279:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3290:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3275:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3275:18:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "3295:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3268:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3268:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3268:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "3337:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3345:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3333:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3333:15:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3354:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3365:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3350:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3350:18:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "3370:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "3311:21:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3311:66:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3311:66:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3386:62:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3402:9:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3421:6:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3429:2:105",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3417:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3417:15:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3438:2:105",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "3434:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3434:7:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "3413:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3413:29:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3398:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3398:45:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3445:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3394:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3394:54:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3386:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3161:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3172:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3183:4:105",
                "type": ""
              }
            ],
            "src": "3071:383:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3529:177:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3575:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3584:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3587:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3577:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3577:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3577:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3550:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3559:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3546:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3546:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3571:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3542:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3542:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3539:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3600:36:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3626:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3613:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3613:23:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "3604:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3670:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "3645:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3645:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3645:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3685:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "3695:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3685:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3495:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3506:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3518:6:105",
                "type": ""
              }
            ],
            "src": "3459:247:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3796:165:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3842:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3851:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3854:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3844:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3844:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3844:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3817:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3826:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3813:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3813:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3838:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3809:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3809:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3806:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3867:37:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3894:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint8",
                      "nodeType": "YulIdentifier",
                      "src": "3877:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3877:27:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3867:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3913:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3940:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3951:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3936:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3936:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3923:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3923:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "3913:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint8t_bytes32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3754:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3765:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3777:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3785:6:105",
                "type": ""
              }
            ],
            "src": "3711:250:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4065:93:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "4075:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4087:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4098:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4083:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4083:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "4075:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4117:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "4132:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4140:10:105",
                            "type": "",
                            "value": "0xffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "4128:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4128:23:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4110:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4110:42:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4110:42:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4034:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4045:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "4056:4:105",
                "type": ""
              }
            ],
            "src": "3966:192:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4292:190:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "4302:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4314:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4325:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4310:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4310:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "4302:4:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4337:44:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "4347:34:105",
                    "type": "",
                    "value": "0xffffffffffffffffffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "4341:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4397:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "4412:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "4420:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "4408:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4408:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4390:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4390:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4390:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4444:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4455:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4440:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4440:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "4464:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "4472:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "4460:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4460:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4433:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4433:43:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4433:43:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint128_t_uint128__to_t_uint128_t_uint128__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4253:9:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "4264:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4272:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "4283:4:105",
                "type": ""
              }
            ],
            "src": "4163:319:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4574:161:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4620:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4629:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4632:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4622:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4622:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4622:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4595:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4604:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4591:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4591:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4616:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "4587:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4587:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4584:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4645:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4668:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4655:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4655:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "4645:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4687:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4714:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4725:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4710:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4710:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4697:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4697:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "4687:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4532:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "4543:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4555:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "4563:6:105",
                "type": ""
              }
            ],
            "src": "4487:248:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4832:283:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4881:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4890:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4893:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4883:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4883:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4883:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "4860:6:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4868:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4856:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4856:17:105"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "4875:3:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "4852:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4852:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "4845:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4845:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4842:55:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4906:30:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "4929:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4916:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4916:20:105"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "4906:6:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4979:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4988:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4991:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4981:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4981:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4981:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "4951:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4959:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "4948:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4948:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4945:50:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5004:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "5020:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5028:4:105",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5016:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5016:17:105"
                  },
                  "variableNames": [
                    {
                      "name": "arrayPos",
                      "nodeType": "YulIdentifier",
                      "src": "5004:8:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5093:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5102:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5105:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5095:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5095:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5095:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "5056:6:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5068:1:105",
                                    "type": "",
                                    "value": "5"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "5071:6:105"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "5064:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5064:14:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "5052:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5052:27:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5081:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5048:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5048:38:105"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "5088:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "5045:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5045:47:105"
                  },
                  "nodeType": "YulIf",
                  "src": "5042:67:105"
                }
              ]
            },
            "name": "abi_decode_array_address_payable_dyn_calldata",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "4795:6:105",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "4803:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "arrayPos",
                "nodeType": "YulTypedName",
                "src": "4811:8:105",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "4821:6:105",
                "type": ""
              }
            ],
            "src": "4740:375:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5285:632:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5331:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5340:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5343:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5333:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5333:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5333:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5306:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5315:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5302:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5302:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5327:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5298:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5298:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "5295:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5356:37:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5383:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5370:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5370:23:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "5360:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5402:28:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "5412:18:105",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "5406:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5457:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5466:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5469:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5459:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5459:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5459:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "5445:6:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "5453:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "5442:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5442:14:105"
                  },
                  "nodeType": "YulIf",
                  "src": "5439:34:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5482:104:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5558:9:105"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "5569:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5554:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5554:22:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "5578:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_address_payable_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "5508:45:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5508:78:105"
                  },
                  "variables": [
                    {
                      "name": "value0_1",
                      "nodeType": "YulTypedName",
                      "src": "5486:8:105",
                      "type": ""
                    },
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "5496:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5595:18:105",
                  "value": {
                    "name": "value0_1",
                    "nodeType": "YulIdentifier",
                    "src": "5605:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "5595:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5622:18:105",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "5632:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "5622:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5649:48:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5682:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5693:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5678:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5678:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5665:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5665:32:105"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "5653:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5726:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5735:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5738:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5728:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5728:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5728:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "5712:8:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "5722:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "5709:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5709:16:105"
                  },
                  "nodeType": "YulIf",
                  "src": "5706:36:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5751:106:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5827:9:105"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "5838:8:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5823:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5823:24:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "5849:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_address_payable_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "5777:45:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5777:80:105"
                  },
                  "variables": [
                    {
                      "name": "value2_1",
                      "nodeType": "YulTypedName",
                      "src": "5755:8:105",
                      "type": ""
                    },
                    {
                      "name": "value3_1",
                      "nodeType": "YulTypedName",
                      "src": "5765:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5866:18:105",
                  "value": {
                    "name": "value2_1",
                    "nodeType": "YulIdentifier",
                    "src": "5876:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "5866:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5893:18:105",
                  "value": {
                    "name": "value3_1",
                    "nodeType": "YulIdentifier",
                    "src": "5903:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "5893:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_array$_t_address_payable_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5227:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5238:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5250:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "5258:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "5266:6:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "5274:6:105",
                "type": ""
              }
            ],
            "src": "5120:797:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6017:92:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "6027:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6039:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6050:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6035:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6035:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "6027:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6069:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "6094:6:105"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "6087:6:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6087:14:105"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "6080:6:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6080:22:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6062:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6062:41:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6062:41:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5986:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5997:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "6008:4:105",
                "type": ""
              }
            ],
            "src": "5922:187:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6216:216:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6262:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6271:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6274:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6264:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6264:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6264:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "6237:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6246:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "6233:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6233:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6258:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "6229:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6229:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "6226:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6287:37:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6314:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint8",
                      "nodeType": "YulIdentifier",
                      "src": "6297:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6297:27:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "6287:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6333:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6360:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6371:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6356:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6356:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6343:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6343:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "6333:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6384:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6411:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6422:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6407:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6407:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6394:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6394:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "6384:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint8t_bytes32t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6166:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "6177:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6189:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "6197:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "6205:6:105",
                "type": ""
              }
            ],
            "src": "6114:318:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6611:683:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6657:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6666:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6669:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6659:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6659:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6659:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "6632:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6641:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "6628:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6628:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6653:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "6624:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6624:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "6621:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6682:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6705:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6692:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6692:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "6682:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6724:46:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6755:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6766:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6751:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6751:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6738:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6738:32:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "6728:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6779:28:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "6789:18:105",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "6783:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6834:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6843:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6846:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6836:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6836:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6836:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "6822:6:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "6830:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "6819:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6819:14:105"
                  },
                  "nodeType": "YulIf",
                  "src": "6816:34:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6859:104:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6935:9:105"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "6946:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6931:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6931:22:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "6955:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_address_payable_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "6885:45:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6885:78:105"
                  },
                  "variables": [
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "6863:8:105",
                      "type": ""
                    },
                    {
                      "name": "value2_1",
                      "nodeType": "YulTypedName",
                      "src": "6873:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6972:18:105",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "6982:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "6972:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6999:18:105",
                  "value": {
                    "name": "value2_1",
                    "nodeType": "YulIdentifier",
                    "src": "7009:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "6999:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7026:48:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7059:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7070:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7055:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7055:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "7042:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7042:32:105"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "7030:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7103:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7112:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7115:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7105:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7105:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7105:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "7089:8:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "7099:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "7086:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7086:16:105"
                  },
                  "nodeType": "YulIf",
                  "src": "7083:36:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7128:106:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7204:9:105"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "7215:8:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7200:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7200:24:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "7226:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_address_payable_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "7154:45:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7154:80:105"
                  },
                  "variables": [
                    {
                      "name": "value3_1",
                      "nodeType": "YulTypedName",
                      "src": "7132:8:105",
                      "type": ""
                    },
                    {
                      "name": "value4_1",
                      "nodeType": "YulTypedName",
                      "src": "7142:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7243:18:105",
                  "value": {
                    "name": "value3_1",
                    "nodeType": "YulIdentifier",
                    "src": "7253:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "7243:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7270:18:105",
                  "value": {
                    "name": "value4_1",
                    "nodeType": "YulIdentifier",
                    "src": "7280:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "7270:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6545:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "6556:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6568:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "6576:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "6584:6:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "6592:6:105",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "6600:6:105",
                "type": ""
              }
            ],
            "src": "6437:857:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7348:139:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "7358:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "7380:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "7367:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7367:20:105"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "7358:5:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7465:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7474:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7477:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7467:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7467:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7467:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "7409:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "7420:5:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7427:34:105",
                                "type": "",
                                "value": "0xffffffffffffffffffffffffffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "7416:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7416:46:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "7406:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7406:57:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "7399:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7399:65:105"
                  },
                  "nodeType": "YulIf",
                  "src": "7396:85:105"
                }
              ]
            },
            "name": "abi_decode_uint128",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "7327:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "7338:5:105",
                "type": ""
              }
            ],
            "src": "7299:188:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7596:224:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7642:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7651:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7654:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7644:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7644:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7644:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "7617:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7626:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "7613:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7613:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7638:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "7609:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7609:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "7606:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7667:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7690:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "7677:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7677:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "7667:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7709:48:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7742:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7753:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7738:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7738:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint128",
                      "nodeType": "YulIdentifier",
                      "src": "7719:18:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7719:38:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "7709:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7766:48:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7799:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7810:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7795:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7795:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint128",
                      "nodeType": "YulIdentifier",
                      "src": "7776:18:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7776:38:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "7766:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_uint128t_uint128",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7546:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "7557:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7569:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "7577:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "7585:6:105",
                "type": ""
              }
            ],
            "src": "7492:328:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7954:145:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "7964:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7976:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7987:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7972:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7972:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7964:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8006:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "8017:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7999:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7999:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7999:25:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8044:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8055:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8040:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8040:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "8064:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8080:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "8085:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "8076:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "8076:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8089:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "8072:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8072:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "8060:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8060:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8033:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8033:60:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8033:60:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7915:9:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "7926:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7934:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7945:4:105",
                "type": ""
              }
            ],
            "src": "7825:274:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8278:176:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8295:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8306:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8288:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8288:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8288:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8329:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8340:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8325:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8325:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8345:2:105",
                        "type": "",
                        "value": "26"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8318:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8318:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8318:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8368:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8379:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8364:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8364:18:105"
                      },
                      {
                        "hexValue": "636f6c6c6563744665653a206d73672e76616c756520213d2030",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "8384:28:105",
                        "type": "",
                        "value": "collectFee: msg.value != 0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8357:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8357:56:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8357:56:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8422:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8434:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8445:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8430:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8430:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "8422:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_7a65b4c7a91dd6ca2048801e909a05320ac2eef18e69adf5a94b31376fe1f645__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8255:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "8269:4:105",
                "type": ""
              }
            ],
            "src": "8104:350:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8692:372:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "8702:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8714:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8725:3:105",
                        "type": "",
                        "value": "192"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8710:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8710:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "8702:4:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8738:29:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8756:3:105",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8761:1:105",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "8752:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8752:11:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8765:1:105",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "8748:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8748:19:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "8742:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8783:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "8798:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "8806:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "8794:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8794:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8776:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8776:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8776:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8830:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8841:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8826:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8826:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "8850:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8858:4:105",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "8846:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8846:17:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8819:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8819:45:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8819:45:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8884:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8895:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8880:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8880:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "8904:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8912:4:105",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "8900:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8900:17:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8873:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8873:45:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8873:45:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8938:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8949:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8934:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8934:18:105"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "8954:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8927:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8927:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8927:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8981:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8992:3:105",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8977:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8977:19:105"
                      },
                      {
                        "name": "value4",
                        "nodeType": "YulIdentifier",
                        "src": "8998:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8970:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8970:35:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8970:35:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9025:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9036:3:105",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9021:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9021:19:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value5",
                            "nodeType": "YulIdentifier",
                            "src": "9046:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "9054:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "9042:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9042:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9014:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9014:44:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9014:44:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_uint8_t_uint8_t_bytes32_t_uint256_t_address__to_t_address_t_uint8_t_uint8_t_bytes32_t_uint256_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8621:9:105",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "8632:6:105",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "8640:6:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "8648:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "8656:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "8664:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "8672:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "8683:4:105",
                "type": ""
              }
            ],
            "src": "8459:605:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9243:237:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9260:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9271:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9253:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9253:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9253:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9294:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9305:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9290:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9290:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9310:2:105",
                        "type": "",
                        "value": "47"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9283:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9283:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9283:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9333:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9344:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9329:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9329:18:105"
                      },
                      {
                        "hexValue": "416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "9349:34:105",
                        "type": "",
                        "value": "AccessControl: sender must be an"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9322:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9322:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9322:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9404:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9415:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9400:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9400:18:105"
                      },
                      {
                        "hexValue": "2061646d696e20746f206772616e74",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "9420:17:105",
                        "type": "",
                        "value": " admin to grant"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9393:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9393:45:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9393:45:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9447:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9459:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9470:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "9455:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9455:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "9447:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0ba7116025f1ef6b158a2bd2238e617f30e17c9e456917d901086ca4f8ad2811__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9220:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "9234:4:105",
                "type": ""
              }
            ],
            "src": "9069:411:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9659:237:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9676:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9687:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9669:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9669:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9669:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9710:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9721:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9706:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9706:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9726:2:105",
                        "type": "",
                        "value": "47"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9699:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9699:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9699:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9749:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9760:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9745:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9745:18:105"
                      },
                      {
                        "hexValue": "416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e6365",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "9765:34:105",
                        "type": "",
                        "value": "AccessControl: can only renounce"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9738:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9738:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9738:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9820:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9831:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9816:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9816:18:105"
                      },
                      {
                        "hexValue": "20726f6c657320666f722073656c66",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "9836:17:105",
                        "type": "",
                        "value": " roles for self"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9809:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9809:45:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9809:45:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9863:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9875:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9886:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "9871:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9871:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "9863:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9636:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "9650:4:105",
                "type": ""
              }
            ],
            "src": "9485:411:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10075:173:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10092:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10103:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10085:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10085:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10085:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10126:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10137:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10122:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10122:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10142:2:105",
                        "type": "",
                        "value": "23"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10115:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10115:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10115:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10165:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10176:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10161:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10161:18:105"
                      },
                      {
                        "hexValue": "43616e6e6f742072656e6f756e6365206f6e6573656c66",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10181:25:105",
                        "type": "",
                        "value": "Cannot renounce oneself"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10154:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10154:53:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10154:53:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10216:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10228:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10239:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10224:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10224:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "10216:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_ab1c5f98bafd089c448d0f437f7951a06dfd484be68434b4420ed4d39647c206__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10052:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10066:4:105",
                "type": ""
              }
            ],
            "src": "9901:347:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10427:180:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10444:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10455:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10437:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10437:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10437:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10478:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10489:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10474:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10474:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10494:2:105",
                        "type": "",
                        "value": "30"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10467:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10467:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10467:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10517:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10528:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10513:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10513:18:105"
                      },
                      {
                        "hexValue": "73656e64657220646f65736e277420686176652061646d696e20726f6c65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10533:32:105",
                        "type": "",
                        "value": "sender doesn't have admin role"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10506:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10506:60:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10506:60:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10575:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10587:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10598:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10583:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10583:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "10575:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_cccb3b305edc7308d7027b1001041a46b235f7d3213d690bb469676069d9b205__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10404:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10418:4:105",
                "type": ""
              }
            ],
            "src": "10253:354:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10786:181:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10803:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10814:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10796:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10796:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10796:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10837:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10848:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10833:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10833:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10853:2:105",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10826:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10826:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10826:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10876:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10887:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10872:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10872:18:105"
                      },
                      {
                        "hexValue": "61646472735b5d2c20616d6f756e74735b5d3a2064696666206c656e677468",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10892:33:105",
                        "type": "",
                        "value": "addrs[], amounts[]: diff length"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10865:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10865:61:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10865:61:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10935:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10947:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10958:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10943:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10943:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "10935:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_6294e89c3434efe3f2b9f4527205255a0d63a93ae07514ac7ac8f6435286aa9b__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10763:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10777:4:105",
                "type": ""
              }
            ],
            "src": "10612:355:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11004:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11021:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11028:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11033:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "11024:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11024:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11014:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11014:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11014:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11061:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11064:4:105",
                        "type": "",
                        "value": "0x32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11054:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11054:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11054:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11085:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11088:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "11078:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11078:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11078:15:105"
                }
              ]
            },
            "name": "panic_error_0x32",
            "nodeType": "YulFunctionDefinition",
            "src": "10972:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11182:177:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "11228:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11237:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "11240:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "11230:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11230:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "11230:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "11203:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11212:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "11199:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11199:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11224:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "11195:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11195:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "11192:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "11253:36:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11279:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "11266:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11266:23:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "11257:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "11323:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "11298:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11298:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11298:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11338:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "11348:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "11338:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address_payable",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "11148:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "11159:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "11171:6:105",
                "type": ""
              }
            ],
            "src": "11104:255:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11555:14:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "11557:10:105",
                  "value": {
                    "name": "pos",
                    "nodeType": "YulIdentifier",
                    "src": "11564:3:105"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "11557:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "11539:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "11547:3:105",
                "type": ""
              }
            ],
            "src": "11364:205:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11748:175:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11765:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11776:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11758:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11758:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11758:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11799:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11810:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11795:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11795:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11815:2:105",
                        "type": "",
                        "value": "25"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11788:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11788:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11788:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11838:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11849:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11834:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11834:18:105"
                      },
                      {
                        "hexValue": "466565206574686572207472616e73666572206661696c6564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "11854:27:105",
                        "type": "",
                        "value": "Fee ether transfer failed"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11827:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11827:55:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11827:55:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11891:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11903:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11914:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11899:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11899:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "11891:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_c83ea8d31d5b2432d5661a262a1c8abcb30052289f0faa441155730eeab43e0a__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "11725:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "11739:4:105",
                "type": ""
              }
            ],
            "src": "11574:349:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12093:218:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "12103:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12115:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12126:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12111:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12111:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12103:4:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12138:29:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12156:3:105",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12161:1:105",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "12152:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12152:11:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12165:1:105",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "12148:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12148:19:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "12142:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12183:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "12198:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "12206:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "12194:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12194:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12176:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12176:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12176:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12230:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12241:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12226:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12226:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "12250:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "12258:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "12246:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12246:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12219:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12219:43:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12219:43:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12282:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12293:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12278:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12278:18:105"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "12298:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12271:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12271:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12271:34:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_address_payable_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12046:9:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "12057:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "12065:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "12073:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12084:4:105",
                "type": ""
              }
            ],
            "src": "11928:383:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12348:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12365:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12372:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12377:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "12368:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12368:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12358:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12358:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12358:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12405:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12408:4:105",
                        "type": "",
                        "value": "0x11"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12398:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12398:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12398:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12429:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12432:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "12422:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12422:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12422:15:105"
                }
              ]
            },
            "name": "panic_error_0x11",
            "nodeType": "YulFunctionDefinition",
            "src": "12316:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12495:88:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "12526:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "12528:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12528:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "12528:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "12511:5:105"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12522:1:105",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "12518:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12518:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nodeType": "YulIdentifier",
                      "src": "12508:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12508:17:105"
                  },
                  "nodeType": "YulIf",
                  "src": "12505:43:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12557:20:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "12568:5:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12575:1:105",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12564:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12564:13:105"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "12557:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "increment_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "12477:5:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "12487:3:105",
                "type": ""
              }
            ],
            "src": "12448:135:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12762:181:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12779:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12790:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12772:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12772:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12772:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12813:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12824:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12809:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12809:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12829:2:105",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12802:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12802:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12802:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12852:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12863:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12848:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12848:18:105"
                      },
                      {
                        "hexValue": "43757272656e742066656520697320657175616c20746f206e657720666565",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "12868:33:105",
                        "type": "",
                        "value": "Current fee is equal to new fee"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12841:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12841:61:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12841:61:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12911:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12923:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12934:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12919:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12919:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12911:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_db095f13e245243418ee9a5b7ae0408e2f6a2092be336cf2ec7b5f2ae85b9133__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12739:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12753:4:105",
                "type": ""
              }
            ],
            "src": "12588:355:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13029:170:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "13075:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "13084:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "13087:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "13077:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "13077:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "13077:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "13050:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13059:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "13046:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13046:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13071:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "13042:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13042:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "13039:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "13100:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13119:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "13113:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13113:16:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "13104:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "13163:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "13138:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13138:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13138:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13178:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "13188:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "13178:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12995:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "13006:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "13018:6:105",
                "type": ""
              }
            ],
            "src": "12948:251:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13361:218:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "13371:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13383:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13394:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13379:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13379:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13371:4:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "13406:29:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13424:3:105",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13429:1:105",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "13420:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13420:11:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13433:1:105",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "13416:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13416:19:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "13410:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13451:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "13466:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "13474:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "13462:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13462:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13444:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13444:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13444:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13498:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13509:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13494:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13494:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "13518:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "13526:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "13514:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13514:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13487:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13487:43:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13487:43:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13550:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13561:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13546:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13546:18:105"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "13566:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13539:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13539:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13539:34:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13314:9:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "13325:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "13333:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "13341:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13352:4:105",
                "type": ""
              }
            ],
            "src": "13204:375:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13758:238:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13775:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13786:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13768:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13768:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13768:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13809:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13820:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13805:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13805:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13825:2:105",
                        "type": "",
                        "value": "48"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13798:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13798:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13798:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13848:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13859:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13844:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13844:18:105"
                      },
                      {
                        "hexValue": "557070657220626f756e64206d757374206265206c6172676572207468616e20",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "13864:34:105",
                        "type": "",
                        "value": "Upper bound must be larger than "
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13837:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13837:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13837:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13919:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13930:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13915:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13915:18:105"
                      },
                      {
                        "hexValue": "6c6f77657220626f756e64206f722030",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "13935:18:105",
                        "type": "",
                        "value": "lower bound or 0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13908:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13908:46:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13908:46:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13963:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13975:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13986:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13971:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13971:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13963:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_652f43be7e7702566082f3925a2196fcf8e8aaa543bd46c4af5c62ccb177eb74__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13735:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13749:4:105",
                "type": ""
              }
            ],
            "src": "13584:412:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14175:228:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14192:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14203:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14185:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14185:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14185:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14226:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14237:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14222:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14222:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14242:2:105",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14215:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14215:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14215:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14265:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14276:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14261:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14261:18:105"
                      },
                      {
                        "hexValue": "43757272656e7420626f756e64732061726520657175616c20746f206e657720",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "14281:34:105",
                        "type": "",
                        "value": "Current bounds are equal to new "
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14254:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14254:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14254:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14336:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14347:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14332:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14332:18:105"
                      },
                      {
                        "hexValue": "626f756e6473",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "14352:8:105",
                        "type": "",
                        "value": "bounds"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14325:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14325:36:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14325:36:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "14370:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14382:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14393:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14378:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14378:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14370:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_36b74e5f379e2a998a7d6182040f3657252741580e6591c18971ddc1cbd71b7e__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14152:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14166:4:105",
                "type": ""
              }
            ],
            "src": "14001:402:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14537:190:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "14547:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14559:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14570:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "14555:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14555:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "14547:4:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "14582:44:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "14592:34:105",
                    "type": "",
                    "value": "0xffffffffffffffffffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "14586:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14642:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "14657:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "14665:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "14653:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14653:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14635:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14635:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14635:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14689:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14700:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14685:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14685:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "14709:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "14717:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "14705:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14705:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14678:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14678:43:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14678:43:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint128_t_uint128__to_t_uint256_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14498:9:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "14509:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "14517:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14528:4:105",
                "type": ""
              }
            ],
            "src": "14408:319:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14906:238:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "14923:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14934:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14916:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14916:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14916:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14957:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "14968:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14953:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14953:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14973:2:105",
                        "type": "",
                        "value": "48"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14946:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14946:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14946:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "14996:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15007:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "14992:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "14992:18:105"
                      },
                      {
                        "hexValue": "416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "15012:34:105",
                        "type": "",
                        "value": "AccessControl: sender must be an"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14985:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14985:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14985:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15067:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15078:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15063:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15063:18:105"
                      },
                      {
                        "hexValue": "2061646d696e20746f207265766f6b65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "15083:18:105",
                        "type": "",
                        "value": " admin to revoke"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15056:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15056:46:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15056:46:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15111:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15123:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15134:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15119:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15119:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15111:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_64344570eab7406ca49d34d38bf2b2496dfda914405390c5057c8b0aabf798a3__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14883:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14897:4:105",
                "type": ""
              }
            ],
            "src": "14732:412:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15323:234:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15340:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15351:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15333:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15333:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15333:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15374:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15385:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15370:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15370:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15390:2:105",
                        "type": "",
                        "value": "44"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15363:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15363:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15363:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15413:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15424:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15409:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15409:18:105"
                      },
                      {
                        "hexValue": "73656e646572206d75737420626520627269646765206f722066656520726f75",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "15429:34:105",
                        "type": "",
                        "value": "sender must be bridge or fee rou"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15402:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15402:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15402:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15484:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15495:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15480:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15480:18:105"
                      },
                      {
                        "hexValue": "74657220636f6e7472616374",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "15500:14:105",
                        "type": "",
                        "value": "ter contract"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15473:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15473:42:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15473:42:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15524:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15536:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15547:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15532:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15532:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15524:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0e421896d469e70aea183401bab489f45e95ec1e32ec153a2e00f0f7d7b945ab__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15300:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15314:4:105",
                "type": ""
              }
            ],
            "src": "15149:408:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15632:110:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "15678:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "15687:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "15690:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "15680:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "15680:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "15680:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "15653:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15662:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "15649:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15649:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15674:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "15645:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15645:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "15642:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15703:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15726:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "15713:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15713:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "15703:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15598:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "15609:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "15621:6:105",
                "type": ""
              }
            ],
            "src": "15562:180:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15799:116:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "15858:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "15860:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "15860:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "15860:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "x",
                                "nodeType": "YulIdentifier",
                                "src": "15830:1:105"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "15823:6:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "15823:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "15816:6:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15816:17:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "15838:1:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15849:1:105",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "15845:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15845:6:105"
                              },
                              {
                                "name": "x",
                                "nodeType": "YulIdentifier",
                                "src": "15853:1:105"
                              }
                            ],
                            "functionName": {
                              "name": "div",
                              "nodeType": "YulIdentifier",
                              "src": "15841:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "15841:14:105"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "15835:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15835:21:105"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "15812:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15812:45:105"
                  },
                  "nodeType": "YulIf",
                  "src": "15809:71:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15889:20:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "15904:1:105"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "15907:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "mul",
                      "nodeType": "YulIdentifier",
                      "src": "15900:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15900:9:105"
                  },
                  "variableNames": [
                    {
                      "name": "product",
                      "nodeType": "YulIdentifier",
                      "src": "15889:7:105"
                    }
                  ]
                }
              ]
            },
            "name": "checked_mul_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "15778:1:105",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "15781:1:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "product",
                "nodeType": "YulTypedName",
                "src": "15787:7:105",
                "type": ""
              }
            ],
            "src": "15747:168:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15966:171:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "15997:111:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "16018:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "16025:3:105",
                                  "type": "",
                                  "value": "224"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "16030:10:105",
                                  "type": "",
                                  "value": "0x4e487b71"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nodeType": "YulIdentifier",
                                "src": "16021:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "16021:20:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "16011:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "16011:31:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "16011:31:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "16062:1:105",
                              "type": "",
                              "value": "4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "16065:4:105",
                              "type": "",
                              "value": "0x12"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "16055:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "16055:15:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "16055:15:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "16090:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "16093:4:105",
                              "type": "",
                              "value": "0x24"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "16083:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "16083:15:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "16083:15:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "15986:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "15979:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15979:9:105"
                  },
                  "nodeType": "YulIf",
                  "src": "15976:132:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "16117:14:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "16126:1:105"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "16129:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "div",
                      "nodeType": "YulIdentifier",
                      "src": "16122:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16122:9:105"
                  },
                  "variableNames": [
                    {
                      "name": "r",
                      "nodeType": "YulIdentifier",
                      "src": "16117:1:105"
                    }
                  ]
                }
              ]
            },
            "name": "checked_div_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "15951:1:105",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "15954:1:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "r",
                "nodeType": "YulTypedName",
                "src": "15960:1:105",
                "type": ""
              }
            ],
            "src": "15920:217:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16271:145:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "16281:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16293:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16304:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16289:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16289:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16281:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16323:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "16338:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16354:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16359:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "16350:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16350:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "16363:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "16346:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "16346:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "16334:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16334:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16316:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16316:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16316:51:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16387:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16398:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16383:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16383:18:105"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "16403:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16376:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16376:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16376:34:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "16232:9:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "16243:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "16251:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "16262:4:105",
                "type": ""
              }
            ],
            "src": "16142:274:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16595:171:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16612:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16623:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16605:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16605:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16605:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16646:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16657:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16642:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16642:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16662:2:105",
                        "type": "",
                        "value": "21"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16635:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16635:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16635:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16685:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16696:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16681:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16681:18:105"
                      },
                      {
                        "hexValue": "45524332303a206e6f74206120636f6e7472616374",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "16701:23:105",
                        "type": "",
                        "value": "ERC20: not a contract"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16674:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16674:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16674:51:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "16734:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16746:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16757:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16742:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16742:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16734:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_028c03388403386dec779e3128482620314456686930c5ae581350674b6d1cc3__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "16572:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "16586:4:105",
                "type": ""
              }
            ],
            "src": "16421:345:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16908:137:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "16918:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "16938:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "16932:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16932:13:105"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "16922:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "16980:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16988:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16976:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16976:17:105"
                      },
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "16995:3:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "17000:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "16954:21:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16954:53:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16954:53:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17016:23:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "17027:3:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "17032:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "17023:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17023:16:105"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "17016:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "16884:3:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "16889:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "16900:3:105",
                "type": ""
              }
            ],
            "src": "16771:274:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17224:168:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17241:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17252:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17234:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17234:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17234:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17275:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17286:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17271:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17271:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17291:2:105",
                        "type": "",
                        "value": "18"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17264:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17264:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17264:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17314:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17325:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17310:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17310:18:105"
                      },
                      {
                        "hexValue": "45524332303a2063616c6c206661696c6564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "17330:20:105",
                        "type": "",
                        "value": "ERC20: call failed"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17303:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17303:48:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17303:48:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17360:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17372:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17383:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "17368:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17368:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "17360:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_3576d6dfb5a800b5f7598d3cc3220135845acd27db3901a5c3c655559195efba__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "17201:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "17215:4:105",
                "type": ""
              }
            ],
            "src": "17050:342:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17475:199:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "17521:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "17530:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "17533:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "17523:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17523:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "17523:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "17496:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17505:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "17492:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17492:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17517:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "17488:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17488:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "17485:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "17546:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17565:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "17559:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17559:16:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "17550:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "17628:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "17637:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "17640:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "17630:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17630:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "17630:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "17597:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "17618:5:105"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "17611:6:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "17611:13:105"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "17604:6:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "17604:21:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "17594:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17594:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "17587:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17587:40:105"
                  },
                  "nodeType": "YulIf",
                  "src": "17584:60:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17653:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "17663:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "17653:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bool_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "17441:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "17452:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "17464:6:105",
                "type": ""
              }
            ],
            "src": "17397:277:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17853:182:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17870:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17881:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17863:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17863:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17863:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17904:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17915:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17900:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17900:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17920:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17893:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17893:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17893:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17943:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17954:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17939:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17939:18:105"
                      },
                      {
                        "hexValue": "45524332303a206f7065726174696f6e20646964206e6f742073756363656564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "17959:34:105",
                        "type": "",
                        "value": "ERC20: operation did not succeed"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17932:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17932:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17932:62:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "18003:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18015:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18026:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "18011:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18011:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "18003:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0e070c5d84d2ce64f06a55372ede71bea348c7746469ec289c4aba299bc05fdc__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "17830:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "17844:4:105",
                "type": ""
              }
            ],
            "src": "17679:356:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18089:76:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "18111:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "18113:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "18113:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "18113:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "18105:1:105"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "18108:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "18102:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18102:8:105"
                  },
                  "nodeType": "YulIf",
                  "src": "18099:34:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "18142:17:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "18154:1:105"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "18157:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "18150:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18150:9:105"
                  },
                  "variableNames": [
                    {
                      "name": "diff",
                      "nodeType": "YulIdentifier",
                      "src": "18142:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "checked_sub_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "18071:1:105",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "18074:1:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "diff",
                "nodeType": "YulTypedName",
                "src": "18080:4:105",
                "type": ""
              }
            ],
            "src": "18040:125:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18202:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18219:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18226:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18231:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "18222:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18222:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18212:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18212:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18212:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18259:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18262:4:105",
                        "type": "",
                        "value": "0x31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18252:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18252:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18252:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18283:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18286:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "18276:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18276:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18276:15:105"
                }
              ]
            },
            "name": "panic_error_0x31",
            "nodeType": "YulFunctionDefinition",
            "src": "18170:127:105"
          }
        ]
      },
      "contents": "{\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 validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\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_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint8t_uint8t_bytes32t_bytes_calldata_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := abi_decode_uint8(add(headStart, 32))\n        value2 := abi_decode_uint8(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let offset := calldataload(add(headStart, 128))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value4_1, value5_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value4 := value4_1\n        value5 := value5_1\n        let offset_1 := calldataload(add(headStart, 160))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value6_1, value7_1 := abi_decode_bytes_calldata(add(headStart, offset_1), dataEnd)\n        value6 := value6_1\n        value7 := value7_1\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        let value := calldataload(add(headStart, 32))\n        validator_revert_address(value)\n        value1 := value\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_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, 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_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint8t_bytes32(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n        value1 := calldataload(add(headStart, 32))\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_encode_tuple_t_uint128_t_uint128__to_t_uint128_t_uint128__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_decode_tuple_t_bytes32t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_array_address_payable_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_address_payable_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_payable_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_address_payable_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\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 abi_decode_tuple_t_uint8t_bytes32t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_bytes32t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value1_1, value2_1 := abi_decode_array_address_payable_dyn_calldata(add(headStart, offset), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n        let offset_1 := calldataload(add(headStart, 64))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value3_1, value4_1 := abi_decode_array_address_payable_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n    }\n    function abi_decode_uint128(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_bytes32t_uint128t_uint128(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_uint128(add(headStart, 32))\n        value2 := abi_decode_uint128(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_7a65b4c7a91dd6ca2048801e909a05320ac2eef18e69adf5a94b31376fe1f645__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 26)\n        mstore(add(headStart, 64), \"collectFee: msg.value != 0\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_uint8_t_uint8_t_bytes32_t_uint256_t_address__to_t_address_t_uint8_t_uint8_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), and(value2, 0xff))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), and(value5, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_0ba7116025f1ef6b158a2bd2238e617f30e17c9e456917d901086ca4f8ad2811__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: sender must be an\")\n        mstore(add(headStart, 96), \" admin to grant\")\n        tail := add(headStart, 128)\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 abi_encode_tuple_t_stringliteral_ab1c5f98bafd089c448d0f437f7951a06dfd484be68434b4420ed4d39647c206__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"Cannot renounce oneself\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_cccb3b305edc7308d7027b1001041a46b235f7d3213d690bb469676069d9b205__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), \"sender doesn't have admin role\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_6294e89c3434efe3f2b9f4527205255a0d63a93ae07514ac7ac8f6435286aa9b__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), \"addrs[], amounts[]: diff length\")\n        tail := add(headStart, 96)\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_decode_tuple_t_address_payable(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n    { end := pos }\n    function abi_encode_tuple_t_stringliteral_c83ea8d31d5b2432d5661a262a1c8abcb30052289f0faa441155730eeab43e0a__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), \"Fee ether transfer failed\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address_payable_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_stringliteral_db095f13e245243418ee9a5b7ae0408e2f6a2092be336cf2ec7b5f2ae85b9133__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), \"Current fee is equal to new fee\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_stringliteral_652f43be7e7702566082f3925a2196fcf8e8aaa543bd46c4af5c62ccb177eb74__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), \"Upper bound must be larger than \")\n        mstore(add(headStart, 96), \"lower bound or 0\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_36b74e5f379e2a998a7d6182040f3657252741580e6591c18971ddc1cbd71b7e__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), \"Current bounds are equal to new \")\n        mstore(add(headStart, 96), \"bounds\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_uint128_t_uint128__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_64344570eab7406ca49d34d38bf2b2496dfda914405390c5057c8b0aabf798a3__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), \"AccessControl: sender must be an\")\n        mstore(add(headStart, 96), \" admin to revoke\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_0e421896d469e70aea183401bab489f45e95ec1e32ec153a2e00f0f7d7b945ab__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 44)\n        mstore(add(headStart, 64), \"sender must be bridge or fee rou\")\n        mstore(add(headStart, 96), \"ter contract\")\n        tail := add(headStart, 128)\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 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 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_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_028c03388403386dec779e3128482620314456686930c5ae581350674b6d1cc3__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), \"ERC20: not a contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_3576d6dfb5a800b5f7598d3cc3220135845acd27db3901a5c3c655559195efba__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"ERC20: call failed\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_0e070c5d84d2ce64f06a55372ede71bea348c7746469ec289c4aba299bc05fdc__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), \"ERC20: operation did not succeed\")\n        tail := add(headStart, 96)\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_0x31()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x31)\n        revert(0, 0x24)\n    }\n}",
      "id": 105,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "457:6281:82:-:0;;;1293:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1499:30:81;;;;;1539:50;;;;1399:13:82;1414:23;1599:42:81;2054:4:96;1630:10:81;1599;:42::i;:::-;1421:227;;1293:148:82;;457:6281;;6727:110:96;6805:25;6816:4;6822:7;6805:10;:25::i;:::-;6727:110;;:::o;7044:184::-;7117:6;:12;;;;;;;;;;;:33;;7142:7;;7117:24;;;;;:33;;:::i;:::-;7113:109;;;7171:40;;719:10:33;;-1:-1:-1;;;;;7171:40:96;;;7183:4;;7171:40;;;;;7044:184;;:::o;7612:150:42:-;7682:4;7705:50;7710:3;-1:-1:-1;;;;;7730:23:42;;7705:4;:50::i;:::-;7698:57;;7612:150;;;;;:::o;1697:404::-;1760:4;3834:19;;;:12;;;:19;;;;;;1776:319;;-1:-1:-1;1818:23:42;;;;;;;;:11;:23;;;;;;;;;;;;;1998:18;;1976:19;;;:12;;;:19;;;;;;:40;;;;2030:11;;1776:319;-1:-1:-1;2079:5:42;2072:12;;14:177:105;93:13;;-1:-1:-1;;;;;135:31:105;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:293::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;375:40;405:9;375:40;:::i;:::-;365:50;;434:49;479:2;468:9;464:18;434:49;:::i;:::-;424:59;;196:293;;;;;:::o;:::-;457:6281:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "457:6281:82:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4421:112:96;;;;;;;;;;-1:-1:-1;4421:112:96;;;;;:::i;:::-;4478:7;4504:12;;;;;;;;;;:22;;;;4421:112;;;;345:25:105;;;333:2;318:18;4421:112:96;;;;;;;;4015:572:82;;;;;;:::i;:::-;;:::i;:::-;;4783:223:96;;;;;;;;;;-1:-1:-1;4783:223:96;;;;;:::i;:::-;;:::i;502:39:81:-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2582:32:105;;;2564:51;;2552:2;2537:18;502:39:81;2418:203:105;5957:205:96;;;;;;;;;;-1:-1:-1;5957:205:96;;;;;:::i;:::-;;:::i;4055:185::-;;;;;;;;;;-1:-1:-1;4055:185:96;;;;;:::i;:::-;;:::i;1516:107:82:-;;;;;;;;;;-1:-1:-1;1597:19:82;;;;;;;;;;;-1:-1:-1;;;1597:19:82;;;;1516:107;;;;1597:19;1516:107;:::i;2086:259:81:-;;;;;;;;;;-1:-1:-1;2086:259:81;;;;;:::i;:::-;;:::i;602:76::-;;;;;;;;;;-1:-1:-1;602:76:81;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;559:44:82;;;;;;;;;;;;600:3;559:44;;;;;4140:10:105;4128:23;;;4110:42;;4098:2;4083:18;559:44:82;3966:192:105;547:49:81;;;;;;;;;;;;;;;965:56:82;;;;;;;;;;-1:-1:-1;965:56:82;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;965:56:82;;;;-1:-1:-1;;;965:56:82;;;;;;;;;-1:-1:-1;;;;;4408:15:105;;;4390:34;;4460:15;;;;4455:2;4440:18;;4433:43;4310:18;965:56:82;4163:319:105;3834:136:96;;;;;;;;;;-1:-1:-1;3834:136:96;;;;;:::i;:::-;;:::i;5249:485:81:-;;;;;;;;;;-1:-1:-1;5249:485:81;;;;;:::i;:::-;;:::i;2819:137:96:-;;;;;;;;;;-1:-1:-1;2819:137:96;;;;;:::i;:::-;;:::i;:::-;;;6087:14:105;;6080:22;6062:41;;6050:2;6035:18;2819:137:96;5922:187:105;2009:49:96;;;;;;;;;;-1:-1:-1;2009:49:96;2054:4;2009:49;;4484:375:81;;;;;;;;;;-1:-1:-1;4484:375:81;;;;;:::i;:::-;;:::i;3124:125:96:-;;;;;;;;;;-1:-1:-1;3124:125:96;;;;;:::i;:::-;;:::i;6097:639:82:-;;;;;;;;;;-1:-1:-1;6097:639:82;;;;;:::i;:::-;;:::i;4957:689::-;;;;;;;;;;-1:-1:-1;4957:689:82;;;;;:::i;:::-;;:::i;5240:226:96:-;;;;;;;;;;-1:-1:-1;5240:226:96;;;;;:::i;:::-;;:::i;2215:337:82:-;;;;;;;;;;-1:-1:-1;2215:337:82;;;;;:::i;:::-;;:::i;:::-;;;;7999:25:105;;;-1:-1:-1;;;;;8060:32:105;;;8055:2;8040:18;;8033:60;7972:18;2215:337:82;7825:274:105;4015:572:82;958:21:81;:19;:21::i;:::-;4233:9:82::1;:14:::0;4225:53:::1;;;::::0;-1:-1:-1;;;4225:53:82;;8306:2:105;4225:53:82::1;::::0;::::1;8288:21:105::0;8345:2;8325:18;;;8318:30;8384:28;8364:18;;;8357:56;8430:18;;4225:53:82::1;;;;;;;;;4290:11;4303:20:::0;4327:90:::1;4341:6;4349:12;4363:19;4384:10;4396:11;;4409:7;;4327:13;:90::i;:::-;4289:128;;;;4427:51;4437:12;4451:6;4467:4;4474:3;4427:9;:51::i;:::-;4494:86;::::0;;-1:-1:-1;;;;;8794:15:105;;;8776:34;;8858:4;8846:17;;;8841:2;8826:18;;8819:45;8900:17;;8880:18;;;8873:45;8949:2;8934:18;;8927:34;;;8992:3;8977:19;;8970:35;;;9042:15;;8756:3;9021:19;;9014:44;4494:86:82;;::::1;::::0;;;;8725:3:105;4494:86:82;;::::1;4215:372;;4015:572:::0;;;;;;;;:::o;4783:223:96:-;4874:6;:12;;;;;;;;;;:22;;;4866:45;;719:10:33;2819:137:96;:::i;4866:45::-;4858:105;;;;-1:-1:-1;;;4858:105:96;;9271:2:105;4858:105:96;;;9253:21:105;9310:2;9290:18;;;9283:30;9349:34;9329:18;;;9322:62;-1:-1:-1;;;9400:18:105;;;9393:45;9455:19;;4858:105:96;9069:411:105;4858:105:96;4974:25;4985:4;4991:7;4974:10;:25::i;:::-;4783:223;;:::o;5957:205::-;-1:-1:-1;;;;;6043:23:96;;719:10:33;6043:23:96;6035:83;;;;-1:-1:-1;;;6035:83:96;;9687:2:105;6035:83:96;;;9669:21:105;9726:2;9706:18;;;9699:30;9765:34;9745:18;;;9738:62;-1:-1:-1;;;9816:18:105;;;9809:45;9871:19;;6035:83:96;9485:411:105;6035:83:96;6129:26;6141:4;6147:7;6129:11;:26::i;4055:185::-;4135:7;4161:12;;;;;;;;;;;-1:-1:-1;;;;;4206:25:96;;4161:72;;:36;;:72;;;;;;4055:185;;;;;:::o;2086:259:81:-;719:10:33;-1:-1:-1;;;;;2193:18:81;;;;;2185:54;;;;-1:-1:-1;;;2185:54:81;;10103:2:105;2185:54:81;;;10085:21:105;10142:2;10122:18;;;10115:30;10181:25;10161:18;;;10154:53;10224:18;;2185:54:81;9901:347:105;2185:54:81;2249:39;2054:4:96;2279:8:81;2249:9;:39::i;:::-;2298:40;2054:4:96;2331:6:81;2298:12;:40::i;3834:136:96:-;3907:7;3933:12;;;;;;;;;;:30;;3957:5;3933:23;:30::i;:::-;3926:37;3834:136;-1:-1:-1;;;3834:136:96:o;5249:485:81:-;820:39;2054:4:96;848:10:81;820:7;:39::i;:::-;812:82;;;;-1:-1:-1;;;812:82:81;;;;;;;:::i;:::-;5366:30;;::::1;5358:74;;;::::0;-1:-1:-1;;;5358:74:81;;10814:2:105;5358:74:81::1;::::0;::::1;10796:21:105::0;10853:2;10833:18;;;10826:30;10892:33;10872:18;;;10865:61;10943:18;;5358:74:81::1;10612:355:105::0;5358:74:81::1;5447:9;5442:286;5462:16:::0;;::::1;5442:286;;;5499:24;:5;;5505:1;5499:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;5499:22:81::1;;:24::i;:::-;;5538:12;5555:5;;5561:1;5555:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;5555:13:81::1;5576:7;;5584:1;5576:10;;;;;;;:::i;:::-;;;;;;;5555:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5537:54;;;5613:7;5605:45;;;::::0;-1:-1:-1;;;5605:45:81;;11776:2:105;5605:45:81::1;::::0;::::1;11758:21:105::0;11815:2;11795:18;;;11788:30;11854:27;11834:18;;;11827:55;11899:18;;5605:45:81::1;11574:349:105::0;5605:45:81::1;5669:48;5692:1;5696:5;;5702:1;5696:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;5706:7;;5714:1;5706:10;;;;;;;:::i;:::-;;;;;;;5669:48;;;;;;;-1:-1:-1::0;;;;;12194:15:105;;;12176:34;;12246:15;;;;12241:2;12226:18;;12219:43;12293:2;12278:18;;12271:34;;;;12126:2;12111:18;;11928:383;5669:48:81::1;;;;;;;;-1:-1:-1::0;5480:3:81;::::1;::::0;::::1;:::i;:::-;;;;5442:286;;;;5249:485:::0;;;;:::o;2819:137:96:-;2888:4;2911:12;;;;;;;;;;:38;;2941:7;2911:29;:38::i;4484:375:81:-;820:39;2054:4:96;848:10:81;820:7;:39::i;:::-;812:82;;;;-1:-1:-1;;;812:82:81;;;;;;;:::i;:::-;4616:43:::1;::::0;::::1;4595:18;4616:43:::0;;;:22:::1;:43;::::0;;;;;;;:55;;;;;;;;;4689:20;;::::1;;4681:64;;;::::0;-1:-1:-1;;;4681:64:81;;12790:2:105;4681:64:81::1;::::0;::::1;12772:21:105::0;12829:2;12809:18;;;12802:30;12868:33;12848:18;;;12841:61;12919:18;;4681:64:81::1;12588:355:105::0;4681:64:81::1;4755:43;::::0;::::1;;::::0;;;:22:::1;:43;::::0;;;;;;;:55;;;;;;;;;:64;;;4834:18;;345:25:105;;;4834:18:81::1;::::0;318::105;4834::81::1;;;;;;;4585:274;4484:375:::0;;;:::o;3124:125:96:-;3187:7;3213:12;;;;;;;;;;:29;;:27;:29::i;6097:639:82:-;820:39:81;2054:4:96;848:10:81;820:7;:39::i;:::-;812:82;;;;-1:-1:-1;;;812:82:81;;;;;;;:::i;:::-;6231:30:82;;::::1;6223:74;;;::::0;-1:-1:-1;;;6223:74:82;;10814:2:105;6223:74:82::1;::::0;::::1;10796:21:105::0;10853:2;10833:18;;;10826:30;10892:33;10872:18;;;10865:61;10943:18;;6223:74:82::1;10612:355:105::0;6223:74:82::1;6330:63;::::0;-1:-1:-1;;;6330:63:82;;::::1;::::0;::::1;345:25:105::0;;;6307:20:82::1;::::0;6338:14:::1;-1:-1:-1::0;;;;;6330:51:82::1;::::0;::::1;::::0;318:18:105;;6330:63:82::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6426:71;::::0;-1:-1:-1;;;6426:71:82;;::::1;::::0;::::1;345:25:105::0;;;6307:86:82;;-1:-1:-1;6403:20:82::1;::::0;-1:-1:-1;;;;;6426:59:82;::::1;::::0;::::1;::::0;318:18:105;;6426:71:82::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6403:94;;6512:9;6507:223;6527:16:::0;;::::1;6507:223;;;6564:24;:5;;6570:1;6564:8;;;;;;;:::i;:24::-;;6602:48;6615:12;6629:5;;6635:1;6629:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;6639:7;;6647:1;6639:10;;;;;;;:::i;:::-;;;;;;;6602:12;:48::i;:::-;6669:50;6684:12;6698:5;;6704:1;6698:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;6708:7;;6716:1;6708:10;;;;;;;:::i;:::-;;;;;;;6669:50;;;;;;;-1:-1:-1::0;;;;;12194:15:105;;;12176:34;;12246:15;;;;12241:2;12226:18;;12219:43;12293:2;12278:18;;12271:34;;;;12126:2;12111:18;;11928:383;6669:50:82::1;;;;;;;;6545:3:::0;::::1;::::0;::::1;:::i;:::-;;;;6507:223;;;;6213:523;;6097:639:::0;;;;;:::o;4957:689::-;820:39:81;2054:4:96;848:10:81;820:7;:39::i;:::-;812:82;;;;-1:-1:-1;;;812:82:81;;;;;;;:::i;:::-;-1:-1:-1;;;;;5085:18:82;::::1;::::0;;:53:::1;;;5124:13;-1:-1:-1::0;;;;;5108:29:82::1;:13;-1:-1:-1::0;;;;;5108:29:82::1;;5085:53;5077:114;;;::::0;-1:-1:-1;;;5077:114:82;;13786:2:105;5077:114:82::1;::::0;::::1;13768:21:105::0;13825:2;13805:18;;;13798:30;13864:34;13844:18;;;13837:62;-1:-1:-1;;;13915:18:105;;;13908:46;13971:19;;5077:114:82::1;13584:412:105::0;5077:114:82::1;5201:28;5232:34:::0;;;:22:::1;:34;::::0;;;;;;;;5201:65;;;;::::1;::::0;;;;-1:-1:-1;;;;;5201:65:82;;::::1;::::0;;;-1:-1:-1;;;5201:65:82;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;5284:42;;::::1;;;::::0;:100:::1;;;5371:13;-1:-1:-1::0;;;;;5342:42:82::1;:14;:25;;;-1:-1:-1::0;;;;;5342:42:82::1;;;5284:100;5276:172;;;::::0;-1:-1:-1;;;5276:172:82;;14203:2:105;5276:172:82::1;::::0;::::1;14185:21:105::0;14242:2;14222:18;;;14215:30;14281:34;14261:18;;;14254:62;-1:-1:-1;;;14332:18:105;;;14325:36;14378:19;;5276:172:82::1;14001:402:105::0;5276:172:82::1;5485:36;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;5485:36:82;;::::1;::::0;;;;::::1;;::::0;;::::1;::::0;;;5459:23:::1;5531:34:::0;;;:22:::1;:34:::0;;;;;;:46;;;;;::::1;-1:-1:-1::0;;;5531:46:82::1;::::0;;;::::1;;::::0;;5593;;::::1;::::0;::::1;::::0;5492:13;;5507;;-1:-1:-1;;;;;4408:15:105;;;4390:34;;4460:15;;4455:2;4440:18;;4433:43;4325:2;4310:18;;4163:319;5593:46:82::1;;;;;;;;5067:579;;4957:689:::0;;;:::o;5240:226:96:-;5332:6;:12;;;;;;;;;;:22;;;5324:45;;719:10:33;2819:137:96;:::i;5324:45::-;5316:106;;;;-1:-1:-1;;;5316:106:96;;14934:2:105;5316:106:96;;;14916:21:105;14973:2;14953:18;;;14946:30;15012:34;14992:18;;;14985:62;-1:-1:-1;;;15063:18:105;;;15056:46;15119:19;;5316:106:96;14732:412:105;2215:337:82;2403:11;2416:20;2455:90;2469:6;2477:12;2491:19;2512:10;2524:11;;2537:7;;2455:13;:90::i;:::-;2448:97;;;;2215:337;;;;;;;;;;;:::o;7612:150:42:-;7682:4;7705:50;7710:3;-1:-1:-1;;;;;7730:23:42;;7705:4;:50::i;1003:222:81:-;1078:10;-1:-1:-1;;;;;1092:14:81;1078:28;;;:70;;-1:-1:-1;1110:10:81;-1:-1:-1;;;;;1124:24:81;1110:38;;1078:70;1057:161;;;;-1:-1:-1;;;1057:161:81;;15351:2:105;1057:161:81;;;15333:21:105;15390:2;15370:18;;;15363:30;15429:34;15409:18;;;15402:62;-1:-1:-1;;;15480:18:105;;;15473:42;15532:19;;1057:161:81;15149:408:105;1057:161:81;1003:222::o;2558:1013:82:-;2738:11;2751:20;2783;2814:14;-1:-1:-1;;;;;2806:51:82;;2858:10;2806:63;;;;;;;;;;;;;345:25:105;;333:2;318:18;;199:177;2806:63:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2894:71;;-1:-1:-1;;;2894:71:82;;;;;345:25:105;;;2783:86:82;;-1:-1:-1;;;;;;2894:59:82;;;;;318:18:105;;2894:71:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2975:20;2998:34;;;:22;:34;;;;;;;;2975:57;;;;;;;;;-1:-1:-1;;;;;2975:57:82;;;;;-1:-1:-1;;;2975:57:82;;;;;;;;;;;2879:86;;-1:-1:-1;3069:34:82;;;;3080:11;3069:34;:::i;:::-;3136:43;;;;;;;:22;:43;;;;;;;;:55;;;;;;;;;3043:60;;-1:-1:-1;600:3:82;;3120:71;;3043:60;3120:71;:::i;:::-;:89;;;;:::i;:::-;3281:17;;3114:95;;-1:-1:-1;;;;;;3275:23:82;;;3271:257;;;3320:17;;-1:-1:-1;;;;;3314:23:82;;-1:-1:-1;3271:257:82;;;3436:6;:17;;;-1:-1:-1;;;;;3430:23:82;:3;:23;:48;;;;;3477:1;3457:6;:17;;;-1:-1:-1;;;;;3457:21:82;;3430:48;3426:102;;;3500:6;:17;;;-1:-1:-1;;;;;3494:23:82;;;3426:102;3538:26;;;2558:1013;;;;;;;;;;;:::o;792:220:53:-;932:12;955:50;932:12;980:5;987:9;998:6;955:17;:50::i;7044:184:96:-;7117:6;:12;;;;;;;;;;:33;;7142:7;7117:24;:33::i;:::-;7113:109;;;7171:40;;719:10:33;;-1:-1:-1;;;;;7171:40:96;;;7183:4;;7171:40;;;;;7044:184;;:::o;7234:188::-;7308:6;:12;;;;;;;;;;:36;;7336:7;7308:27;:36::i;:::-;7304:112;;;7365:40;;719:10:33;;-1:-1:-1;;;;;7365:40:96;;;7377:4;;7365:40;;;;;7234:188;;:::o;8870:156:42:-;8944:7;8994:22;8998:3;9010:5;8994:3;:22::i;303:150:101:-;362:7;-1:-1:-1;;;;;385:18:101;;381:44;;412:13;;-1:-1:-1;;;412:13:101;;;;;;;;;;;381:44;-1:-1:-1;442:4:101;303:150::o;8167:165:42:-;-1:-1:-1;;;;;8300:23:42;;8247:4;3834:19;;;:12;;;:19;;;;;;:24;;8270:55;3738:127;8413:115;8476:7;8502:19;8510:3;4028:18;;3946:107;1257:197:53;1385:12;1408:39;1385:12;1429:9;1440:6;1408:13;:39::i;:::-;1353:101;1257:197;;;:::o;1697:404:42:-;1760:4;3834:19;;;:12;;;:19;;;;;;1776:319;;-1:-1:-1;1818:23:42;;;;;;;;:11;:23;;;;;;;;;;;;;1998:18;;1976:19;;;:12;;;:19;;;;;;:40;;;;2030:11;;1776:319;-1:-1:-1;2079:5:42;2072:12;;2939:193:53;3056:68;;-1:-1:-1;;;;;12194:15:105;;;3056:68:53;;;12176:34:105;12246:15;;12226:18;;;12219:43;12278:18;;;12271:34;;;3039:86:53;;3049:5;;-1:-1:-1;;;3079:27:53;12111:18:105;;3056:68:53;;;;-1:-1:-1;;3056:68:53;;;;;;;;;;;;;;-1:-1:-1;;;;;3056:68:53;-1:-1:-1;;;;;;3056:68:53;;;;;;;;;;3039:9;:86::i;7930:156:42:-;8003:4;8026:53;8034:3;-1:-1:-1;;;;;8054:23:42;;8026:7;:53::i;4395:118::-;4462:7;4488:3;:11;;4500:5;4488:18;;;;;;;;:::i;:::-;;;;;;;;;4481:25;;4395:118;;;;:::o;2508:166:53:-;2608:58;;-1:-1:-1;;;;;16334:32:105;;2608:58:53;;;16316:51:105;16383:18;;;16376:34;;;2591:76:53;;2601:5;;-1:-1:-1;;;2631:23:53;16289:18:105;;2608:58:53;16142:274:105;2591:76:53;2508:166;;;:::o;3293:488::-;3426:18;;3471:13;3463:47;;;;-1:-1:-1;;;3463:47:53;;16623:2:105;3463:47:53;;;16605:21:105;16662:2;16642:18;;;16635:30;-1:-1:-1;;;16681:18:105;;;16674:51;16742:18;;3463:47:53;16421:345:105;3463:47:53;3522:12;3536:23;3571:5;-1:-1:-1;;;;;3563:19:53;3583:4;3563:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3521:67;;;;3606:7;3598:38;;;;-1:-1:-1;;;3598:38:53;;17252:2:105;3598:38:53;;;17234:21:105;17291:2;17271:18;;;17264:30;-1:-1:-1;;;17310:18:105;;;17303:48;17368:18;;3598:38:53;17050:342:105;3598:38:53;3651:17;;:21;3647:128;;3708:10;3697:30;;;;;;;;;;;;:::i;:::-;3689:75;;;;-1:-1:-1;;;3689:75:53;;17881:2:105;3689:75:53;;;17863:21:105;;;17900:18;;;17893:30;17959:34;17939:18;;;17932:62;18011:18;;3689:75:53;17679:356:105;2269:1388:42;2335:4;2472:19;;;:12;;;:19;;;;;;2506:15;;2502:1149;;2875:21;2899:14;2912:1;2899:10;:14;:::i;:::-;2947:18;;2875:38;;-1:-1:-1;2927:17:42;;2947:22;;2968:1;;2947:22;:::i;:::-;2927:42;;3001:13;2988:9;:26;2984:398;;3034:17;3054:3;:11;;3066:9;3054:22;;;;;;;;:::i;:::-;;;;;;;;;3034:42;;3205:9;3176:3;:11;;3188:13;3176:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3288:23;;;:12;;;:23;;;;;:36;;;2984:398;3460:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3552:3;:12;;:19;3565:5;3552:19;;;;;;;;;;;3545:26;;;3593:4;3586:11;;;;;;;2502:1149;3635:5;3628:12;;;;;14:180:105;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:105;;14:180;-1:-1:-1;14:180:105:o;381:131::-;-1:-1:-1;;;;;456:31:105;;446:42;;436:70;;502:1;499;492:12;436:70;381:131;:::o;517:156::-;583:20;;643:4;632:16;;622:27;;612:55;;663:1;660;653:12;612:55;517:156;;;:::o;678:347::-;729:8;739:6;793:3;786:4;778:6;774:17;770:27;760:55;;811:1;808;801:12;760:55;-1:-1:-1;834:20:105;;877:18;866:30;;863:50;;;909:1;906;899:12;863:50;946:4;938:6;934:17;922:29;;998:3;991:4;982:6;974;970:19;966:30;963:39;960:59;;;1015:1;1012;1005:12;960:59;678:347;;;;;:::o;1030:1063::-;1152:6;1160;1168;1176;1184;1192;1200;1208;1261:3;1249:9;1240:7;1236:23;1232:33;1229:53;;;1278:1;1275;1268:12;1229:53;1317:9;1304:23;1336:31;1361:5;1336:31;:::i;:::-;1386:5;-1:-1:-1;1410:36:105;1442:2;1427:18;;1410:36;:::i;:::-;1400:46;;1465:36;1497:2;1486:9;1482:18;1465:36;:::i;:::-;1455:46;;1548:2;1537:9;1533:18;1520:32;1510:42;;1603:3;1592:9;1588:19;1575:33;1627:18;1668:2;1660:6;1657:14;1654:34;;;1684:1;1681;1674:12;1654:34;1723:58;1773:7;1764:6;1753:9;1749:22;1723:58;:::i;:::-;1800:8;;-1:-1:-1;1697:84:105;-1:-1:-1;1888:3:105;1873:19;;1860:33;;-1:-1:-1;1905:16:105;;;1902:36;;;1934:1;1931;1924:12;1902:36;;1973:60;2025:7;2014:8;2003:9;1999:24;1973:60;:::i;:::-;1030:1063;;;;-1:-1:-1;1030:1063:105;;-1:-1:-1;1030:1063:105;;;;;;2052:8;-1:-1:-1;;;1030:1063:105:o;2098:315::-;2166:6;2174;2227:2;2215:9;2206:7;2202:23;2198:32;2195:52;;;2243:1;2240;2233:12;2195:52;2279:9;2266:23;2256:33;;2339:2;2328:9;2324:18;2311:32;2352:31;2377:5;2352:31;:::i;:::-;2402:5;2392:15;;;2098:315;;;;;:::o;2808:258::-;2880:1;2890:113;2904:6;2901:1;2898:13;2890:113;;;2980:11;;;2974:18;2961:11;;;2954:39;2926:2;2919:10;2890:113;;;3021:6;3018:1;3015:13;3012:48;;;-1:-1:-1;;3056:1:105;3038:16;;3031:27;2808:258::o;3071:383::-;3220:2;3209:9;3202:21;3183:4;3252:6;3246:13;3295:6;3290:2;3279:9;3275:18;3268:34;3311:66;3370:6;3365:2;3354:9;3350:18;3345:2;3337:6;3333:15;3311:66;:::i;:::-;3438:2;3417:15;-1:-1:-1;;3413:29:105;3398:45;;;;3445:2;3394:54;;3071:383;-1:-1:-1;;3071:383:105:o;3459:247::-;3518:6;3571:2;3559:9;3550:7;3546:23;3542:32;3539:52;;;3587:1;3584;3577:12;3539:52;3626:9;3613:23;3645:31;3670:5;3645:31;:::i;3711:250::-;3777:6;3785;3838:2;3826:9;3817:7;3813:23;3809:32;3806:52;;;3854:1;3851;3844:12;3806:52;3877:27;3894:9;3877:27;:::i;:::-;3867:37;3951:2;3936:18;;;;3923:32;;-1:-1:-1;;;3711:250:105:o;4487:248::-;4555:6;4563;4616:2;4604:9;4595:7;4591:23;4587:32;4584:52;;;4632:1;4629;4622:12;4584:52;-1:-1:-1;;4655:23:105;;;4725:2;4710:18;;;4697:32;;-1:-1:-1;4487:248:105:o;4740:375::-;4811:8;4821:6;4875:3;4868:4;4860:6;4856:17;4852:27;4842:55;;4893:1;4890;4883:12;4842:55;-1:-1:-1;4916:20:105;;4959:18;4948:30;;4945:50;;;4991:1;4988;4981:12;4945:50;5028:4;5020:6;5016:17;5004:29;;5088:3;5081:4;5071:6;5068:1;5064:14;5056:6;5052:27;5048:38;5045:47;5042:67;;;5105:1;5102;5095:12;5120:797;5250:6;5258;5266;5274;5327:2;5315:9;5306:7;5302:23;5298:32;5295:52;;;5343:1;5340;5333:12;5295:52;5383:9;5370:23;5412:18;5453:2;5445:6;5442:14;5439:34;;;5469:1;5466;5459:12;5439:34;5508:78;5578:7;5569:6;5558:9;5554:22;5508:78;:::i;:::-;5605:8;;-1:-1:-1;5482:104:105;-1:-1:-1;5693:2:105;5678:18;;5665:32;;-1:-1:-1;5709:16:105;;;5706:36;;;5738:1;5735;5728:12;5706:36;;5777:80;5849:7;5838:8;5827:9;5823:24;5777:80;:::i;:::-;5120:797;;;;-1:-1:-1;5876:8:105;-1:-1:-1;;;;5120:797:105:o;6114:318::-;6189:6;6197;6205;6258:2;6246:9;6237:7;6233:23;6229:32;6226:52;;;6274:1;6271;6264:12;6226:52;6297:27;6314:9;6297:27;:::i;:::-;6287:37;6371:2;6356:18;;6343:32;;-1:-1:-1;6422:2:105;6407:18;;;6394:32;;6114:318;-1:-1:-1;;;6114:318:105:o;6437:857::-;6568:6;6576;6584;6592;6600;6653:2;6641:9;6632:7;6628:23;6624:32;6621:52;;;6669:1;6666;6659:12;6621:52;6705:9;6692:23;6682:33;;6766:2;6755:9;6751:18;6738:32;6789:18;6830:2;6822:6;6819:14;6816:34;;;6846:1;6843;6836:12;6816:34;6885:78;6955:7;6946:6;6935:9;6931:22;6885:78;:::i;:::-;6982:8;;-1:-1:-1;6859:104:105;-1:-1:-1;7070:2:105;7055:18;;7042:32;;-1:-1:-1;7086:16:105;;;7083:36;;;7115:1;7112;7105:12;7083:36;;7154:80;7226:7;7215:8;7204:9;7200:24;7154:80;:::i;:::-;6437:857;;;;-1:-1:-1;6437:857:105;;-1:-1:-1;7253:8:105;;7128:106;6437:857;-1:-1:-1;;;6437:857:105:o;7299:188::-;7367:20;;-1:-1:-1;;;;;7416:46:105;;7406:57;;7396:85;;7477:1;7474;7467:12;7492:328;7569:6;7577;7585;7638:2;7626:9;7617:7;7613:23;7609:32;7606:52;;;7654:1;7651;7644:12;7606:52;7690:9;7677:23;7667:33;;7719:38;7753:2;7742:9;7738:18;7719:38;:::i;:::-;7709:48;;7776:38;7810:2;7799:9;7795:18;7776:38;:::i;:::-;7766:48;;7492:328;;;;;:::o;10253:354::-;10455:2;10437:21;;;10494:2;10474:18;;;10467:30;10533:32;10528:2;10513:18;;10506:60;10598:2;10583:18;;10253:354::o;10972:127::-;11033:10;11028:3;11024:20;11021:1;11014:31;11064:4;11061:1;11054:15;11088:4;11085:1;11078:15;12316:127;12377:10;12372:3;12368:20;12365:1;12358:31;12408:4;12405:1;12398:15;12432:4;12429:1;12422:15;12448:135;12487:3;-1:-1:-1;;12508:17:105;;12505:43;;;12528:18;;:::i;:::-;-1:-1:-1;12575:1:105;12564:13;;12448:135::o;12948:251::-;13018:6;13071:2;13059:9;13050:7;13046:23;13042:32;13039:52;;;13087:1;13084;13077:12;13039:52;13119:9;13113:16;13138:31;13163:5;13138:31;:::i;15747:168::-;15787:7;15853:1;15849;15845:6;15841:14;15838:1;15835:21;15830:1;15823:9;15816:17;15812:45;15809:71;;;15860:18;;:::i;:::-;-1:-1:-1;15900:9:105;;15747:168::o;15920:217::-;15960:1;15986;15976:132;;16030:10;16025:3;16021:20;16018:1;16011:31;16065:4;16062:1;16055:15;16093:4;16090:1;16083:15;15976:132;-1:-1:-1;16122:9:105;;15920:217::o;16771:274::-;16900:3;16938:6;16932:13;16954:53;17000:6;16995:3;16988:4;16980:6;16976:17;16954:53;:::i;:::-;17023:16;;;;;16771:274;-1:-1:-1;;16771:274:105:o;17397:277::-;17464:6;17517:2;17505:9;17496:7;17492:23;17488:32;17485:52;;;17533:1;17530;17523:12;17485:52;17565:9;17559:16;17618:5;17611:13;17604:21;17597:5;17594:32;17584:60;;17640:1;17637;17630:12;18040:125;18080:4;18108:1;18105;18102:8;18099:34;;;18113:18;;:::i;:::-;-1:-1:-1;18150:9:105;;18040:125::o;18170:127::-;18231:10;18226:3;18222:20;18219:1;18212:31;18262:4;18259:1;18252:15;18286:4;18283:1;18276:15",
  "source": "// The Licensed Work is (c) 2022 Sygma\n// SPDX-License-Identifier: BUSL-1.1\npragma solidity 0.8.11;\n\nimport \"../../interfaces/IBridge.sol\";\nimport \"../../interfaces/IERCHandler.sol\";\nimport \"../../ERC20Safe.sol\";\nimport \"../../utils/SanityChecks.sol\";\nimport { BasicFeeHandler } from \"./BasicFeeHandler.sol\";\n\n/**\n    @title Handles deposit fees.\n    @author ChainSafe Systems.\n    @notice This contract is intended to be used with the Bridge contract.\n */\ncontract PercentageERC20FeeHandler is BasicFeeHandler, ERC20Safe {\n    using SanityChecks for *;\n\n    uint32 public constant HUNDRED_PERCENT = 1e8;\n\n    /**\n        @notice _domainResourceIDToFee[destinationDomainID][resourceID] inherited from BasicFeeHandler in this implementation is\n        in BPS and should be multiplied by 10000 to avoid precision loss\n     */\n    struct Bounds {\n        uint128 lowerBound; // min fee in token amount\n        uint128 upperBound; // max fee in token amount\n    }\n\n    mapping(bytes32 => Bounds) public _resourceIDToFeeBounds;\n\n    event FeeBoundsChanged(uint256 newLowerBound, uint256 newUpperBound);\n\n    /**\n        @param bridgeAddress Contract address of previously deployed Bridge.\n        @param feeHandlerRouterAddress Contract address of previously deployed FeeHandlerRouter.\n     */\n    constructor(\n        address bridgeAddress,\n        address feeHandlerRouterAddress\n    ) BasicFeeHandler(bridgeAddress, feeHandlerRouterAddress) {}\n\n    /**\n        @notice Getter function for fee handler type\n     */\n    function feeHandlerType() public override pure returns (string memory) {\n        return \"percentage\";\n    }\n\n    // Admin functions\n\n    /**\n        @notice Calculates fee for deposit.\n        @param sender Sender of the deposit.\n        @param fromDomainID ID of the source chain.\n        @param destinationDomainID ID of chain deposit will be bridged to.\n        @param resourceID ResourceID to be used when making deposits.\n        @param depositData Additional data about the deposit.\n        @param feeData Additional data to be passed to the fee handler.\n        @return fee Returns the fee amount.\n        @return tokenAddress Returns the address of the token to be used for fee.\n     */\n    function calculateFee(address sender, uint8 fromDomainID, uint8 destinationDomainID, bytes32 resourceID, bytes calldata depositData, bytes calldata feeData) external view override returns(uint256 fee, address tokenAddress) {\n        return _calculateFee(sender, fromDomainID, destinationDomainID, resourceID, depositData, feeData);\n    }\n\n    function _calculateFee(address sender, uint8 fromDomainID, uint8 destinationDomainID, bytes32 resourceID, bytes calldata depositData, bytes calldata feeData) internal view returns(uint256 fee, address tokenAddress) {\n        address tokenHandler = IBridge(_bridgeAddress)._resourceIDToHandlerAddress(resourceID);\n        tokenAddress = IERCHandler(tokenHandler)._resourceIDToTokenContractAddress(resourceID);\n        Bounds memory bounds = _resourceIDToFeeBounds[resourceID];\n\n        (uint256 depositAmount) = abi.decode(depositData, (uint256));\n\n        fee = depositAmount * _domainResourceIDToFee[destinationDomainID][resourceID] / HUNDRED_PERCENT; // 10000 for BPS and 10000 to avoid precision loss\n\n        if (fee < bounds.lowerBound) {\n            fee = bounds.lowerBound;\n        }\n\n        // if upper bound is not set, fee is % of token amount\n        else if (fee > bounds.upperBound && bounds.upperBound > 0) {\n            fee = bounds.upperBound;\n        }\n\n        return (fee, tokenAddress);\n    }\n\n        /**\n        @notice Collects fee for deposit.\n        @param sender Sender of the deposit.\n        @param fromDomainID ID of the source chain.\n        @param destinationDomainID ID of chain deposit will be bridged to.\n        @param resourceID ResourceID to be used when making deposits.\n        @param depositData Additional data about the deposit.\n        @param feeData Additional data to be passed to the fee handler.\n     */\n    function collectFee(address sender, uint8 fromDomainID, uint8 destinationDomainID, bytes32 resourceID, bytes calldata depositData, bytes calldata feeData) payable external override onlyBridgeOrRouter {\n        require(msg.value == 0, \"collectFee: msg.value != 0\");\n\n        (uint256 fee, address tokenAddress) = _calculateFee(sender, fromDomainID, destinationDomainID, resourceID, depositData, feeData);\n        lockERC20(tokenAddress, sender, address(this), fee);\n\n        emit FeeCollected(sender, fromDomainID, destinationDomainID, resourceID, fee, tokenAddress);\n    }\n\n    /**\n        @notice Sets new value for lower and upper fee bounds, both are in token amount.\n        @notice Only callable by admin.\n        @param resourceID ResourceID for which new fee bounds will be set.\n        @param newLowerBound Value {_newLowerBound} will be updated to.\n        @param newUpperBound Value {_newUpperBound} will be updated to.\n     */\n    function changeFeeBounds(bytes32 resourceID, uint128 newLowerBound, uint128 newUpperBound) external onlyAdmin {\n        require(newUpperBound == 0 || (newUpperBound > newLowerBound), \"Upper bound must be larger than lower bound or 0\");\n        Bounds memory existingBounds = _resourceIDToFeeBounds[resourceID];\n        require(existingBounds.lowerBound != newLowerBound ||\n            existingBounds.upperBound != newUpperBound,\n            \"Current bounds are equal to new bounds\"\n        );\n\n        Bounds memory newBounds = Bounds(newLowerBound, newUpperBound);\n        _resourceIDToFeeBounds[resourceID] = newBounds;\n\n        emit FeeBoundsChanged(newLowerBound, newUpperBound);\n    }\n\n        /**\n        @notice Transfers tokens from the contract to the specified addresses. The parameters addrs and amounts are mapped 1-1.\n        This means that the address at index 0 for addrs will receive the amount of tokens from amounts at index 0.\n        @param resourceID ResourceID of the token.\n        @param addrs Array of addresses to transfer {amounts} to.\n        @param amounts Array of amounts to transfer to {addrs}.\n     */\n    function transferERC20Fee(bytes32 resourceID, address[] calldata addrs, uint[] calldata amounts) external onlyAdmin {\n        require(addrs.length == amounts.length, \"addrs[], amounts[]: diff length\");\n        address tokenHandler = IBridge(_bridgeAddress)._resourceIDToHandlerAddress(resourceID);\n        address tokenAddress = IERCHandler(tokenHandler)._resourceIDToTokenContractAddress(resourceID);\n        for (uint256 i = 0; i < addrs.length; i++) {\n            addrs[i].mustNotBeZero();\n            releaseERC20(tokenAddress, addrs[i], amounts[i]);\n            emit FeeDistributed(tokenAddress, addrs[i], amounts[i]);\n        }\n    }\n}\n",
  "sourcePath": "/home/runner/work/sygma-solidity/sygma-solidity/contracts/handlers/fee/PercentageERC20FeeHandler.sol",
  "ast": {
    "absolutePath": "project:/contracts/handlers/fee/PercentageERC20FeeHandler.sol",
    "exportedSymbols": {
      "AccessControl": [
        308
      ],
      "AccessControlEnumerable": [
        433
      ],
      "BasicFeeHandler": [
        16514
      ],
      "Context": [
        5305
      ],
      "ERC165": [
        6167
      ],
      "ERC20": [
        2990
      ],
      "ERC20Burnable": [
        3112
      ],
      "ERC20Pausable": [
        3149
      ],
      "ERC20PresetMinterPauser": [
        3515
      ],
      "ERC20Safe": [
        9222
      ],
      "EnumerableSet": [
        7373
      ],
      "IAccessControl": [
        506
      ],
      "IAccessControlEnumerable": [
        531
      ],
      "IBridge": [
        18146
      ],
      "IERC165": [
        6381
      ],
      "IERC20": [
        3068
      ],
      "IERC20Metadata": [
        3174
      ],
      "IERCHandler": [
        18195
      ],
      "Pausable": [
        728
      ],
      "PercentageERC20FeeHandler": [
        16906
      ],
      "SanityChecks": [
        19158
      ],
      "Strings": [
        5582
      ]
    },
    "id": 16907,
    "license": "BUSL-1.1",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 16516,
        "literals": [
          "solidity",
          "0.8",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "76:23:82"
      },
      {
        "absolutePath": "project:/contracts/interfaces/IBridge.sol",
        "file": "../../interfaces/IBridge.sol",
        "id": 16517,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 16907,
        "sourceUnit": 18147,
        "src": "101:38:82",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/IERCHandler.sol",
        "file": "../../interfaces/IERCHandler.sol",
        "id": 16518,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 16907,
        "sourceUnit": 18196,
        "src": "140:42:82",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/ERC20Safe.sol",
        "file": "../../ERC20Safe.sol",
        "id": 16519,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 16907,
        "sourceUnit": 9223,
        "src": "183:29:82",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/utils/SanityChecks.sol",
        "file": "../../utils/SanityChecks.sol",
        "id": 16520,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 16907,
        "sourceUnit": 19159,
        "src": "213:38:82",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/handlers/fee/BasicFeeHandler.sol",
        "file": "./BasicFeeHandler.sol",
        "id": 16522,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 16907,
        "sourceUnit": 16515,
        "src": "252:56:82",
        "symbolAliases": [
          {
            "foreign": {
              "id": 16521,
              "name": "BasicFeeHandler",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "261:15:82",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 16524,
              "name": "BasicFeeHandler",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 16514,
              "src": "495:15:82"
            },
            "id": 16525,
            "nodeType": "InheritanceSpecifier",
            "src": "495:15:82"
          },
          {
            "baseName": {
              "id": 16526,
              "name": "ERC20Safe",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 9222,
              "src": "512:9:82"
            },
            "id": 16527,
            "nodeType": "InheritanceSpecifier",
            "src": "512:9:82"
          }
        ],
        "canonicalName": "PercentageERC20FeeHandler",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 16523,
          "nodeType": "StructuredDocumentation",
          "src": "310:146:82",
          "text": "@title Handles deposit fees.\n@author ChainSafe Systems.\n@notice This contract is intended to be used with the Bridge contract."
        },
        "fullyImplemented": true,
        "id": 16906,
        "linearizedBaseContracts": [
          16906,
          9222,
          16514,
          18612,
          5305,
          18265
        ],
        "name": "PercentageERC20FeeHandler",
        "nameLocation": "466:25:82",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 16529,
            "libraryName": {
              "id": 16528,
              "name": "SanityChecks",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 19158,
              "src": "534:12:82"
            },
            "nodeType": "UsingForDirective",
            "src": "528:25:82"
          },
          {
            "constant": true,
            "functionSelector": "6ed93dd0",
            "id": 16532,
            "mutability": "constant",
            "name": "HUNDRED_PERCENT",
            "nameLocation": "582:15:82",
            "nodeType": "VariableDeclaration",
            "scope": 16906,
            "src": "559:44:82",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 16530,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "559:6:82",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "value": {
              "hexValue": "316538",
              "id": 16531,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "600:3:82",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_100000000_by_1",
                "typeString": "int_const 100000000"
              },
              "value": "1e8"
            },
            "visibility": "public"
          },
          {
            "canonicalName": "PercentageERC20FeeHandler.Bounds",
            "id": 16537,
            "members": [
              {
                "constant": false,
                "id": 16534,
                "mutability": "mutable",
                "name": "lowerBound",
                "nameLocation": "860:10:82",
                "nodeType": "VariableDeclaration",
                "scope": 16537,
                "src": "852:18:82",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 16533,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "852:7:82",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 16536,
                "mutability": "mutable",
                "name": "upperBound",
                "nameLocation": "915:10:82",
                "nodeType": "VariableDeclaration",
                "scope": 16537,
                "src": "907:18:82",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 16535,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "907:7:82",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Bounds",
            "nameLocation": "835:6:82",
            "nodeType": "StructDefinition",
            "scope": 16906,
            "src": "828:131:82",
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "769d4643",
            "id": 16542,
            "mutability": "mutable",
            "name": "_resourceIDToFeeBounds",
            "nameLocation": "999:22:82",
            "nodeType": "VariableDeclaration",
            "scope": 16906,
            "src": "965:56:82",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Bounds_$16537_storage_$",
              "typeString": "mapping(bytes32 => struct PercentageERC20FeeHandler.Bounds)"
            },
            "typeName": {
              "id": 16541,
              "keyType": {
                "id": 16538,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "973:7:82",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "965:26:82",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Bounds_$16537_storage_$",
                "typeString": "mapping(bytes32 => struct PercentageERC20FeeHandler.Bounds)"
              },
              "valueType": {
                "id": 16540,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 16539,
                  "name": "Bounds",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 16537,
                  "src": "984:6:82"
                },
                "referencedDeclaration": 16537,
                "src": "984:6:82",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Bounds_$16537_storage_ptr",
                  "typeString": "struct PercentageERC20FeeHandler.Bounds"
                }
              }
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "id": 16548,
            "name": "FeeBoundsChanged",
            "nameLocation": "1034:16:82",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 16547,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16544,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newLowerBound",
                  "nameLocation": "1059:13:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16548,
                  "src": "1051:21:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16543,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1051:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16546,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newUpperBound",
                  "nameLocation": "1082:13:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16548,
                  "src": "1074:21:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16545,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1074:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1050:46:82"
            },
            "src": "1028:69:82"
          },
          {
            "body": {
              "id": 16560,
              "nodeType": "Block",
              "src": "1439:2:82",
              "statements": []
            },
            "documentation": {
              "id": 16549,
              "nodeType": "StructuredDocumentation",
              "src": "1103:185:82",
              "text": "@param bridgeAddress Contract address of previously deployed Bridge.\n@param feeHandlerRouterAddress Contract address of previously deployed FeeHandlerRouter."
            },
            "id": 16561,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 16556,
                    "name": "bridgeAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 16551,
                    "src": "1399:13:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "id": 16557,
                    "name": "feeHandlerRouterAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 16553,
                    "src": "1414:23:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 16558,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 16555,
                  "name": "BasicFeeHandler",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 16514,
                  "src": "1383:15:82"
                },
                "nodeType": "ModifierInvocation",
                "src": "1383:55:82"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16554,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16551,
                  "mutability": "mutable",
                  "name": "bridgeAddress",
                  "nameLocation": "1322:13:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16561,
                  "src": "1314:21:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16550,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1314:7:82",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16553,
                  "mutability": "mutable",
                  "name": "feeHandlerRouterAddress",
                  "nameLocation": "1353:23:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16561,
                  "src": "1345:31:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16552,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1345:7:82",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1304:78:82"
            },
            "returnParameters": {
              "id": 16559,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1439:0:82"
            },
            "scope": 16906,
            "src": "1293:148:82",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              16291
            ],
            "body": {
              "id": 16570,
              "nodeType": "Block",
              "src": "1587:36:82",
              "statements": [
                {
                  "expression": {
                    "hexValue": "70657263656e74616765",
                    "id": 16568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1604:12:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_6946155c1c1cae30e8538fccb112e0261b85cd861c40208197da72588b8693b0",
                      "typeString": "literal_string \"percentage\""
                    },
                    "value": "percentage"
                  },
                  "functionReturnParameters": 16567,
                  "id": 16569,
                  "nodeType": "Return",
                  "src": "1597:19:82"
                }
              ]
            },
            "documentation": {
              "id": 16562,
              "nodeType": "StructuredDocumentation",
              "src": "1447:64:82",
              "text": "@notice Getter function for fee handler type"
            },
            "functionSelector": "542774b5",
            "id": 16571,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "feeHandlerType",
            "nameLocation": "1525:14:82",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 16564,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1549:8:82"
            },
            "parameters": {
              "id": 16563,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1539:2:82"
            },
            "returnParameters": {
              "id": 16567,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16566,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 16571,
                  "src": "1572:13:82",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 16565,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1572:6:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1571:15:82"
            },
            "scope": 16906,
            "src": "1516:107:82",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              16401
            ],
            "body": {
              "id": 16601,
              "nodeType": "Block",
              "src": "2438:114:82",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 16593,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16574,
                        "src": "2469:6:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 16594,
                        "name": "fromDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16576,
                        "src": "2477:12:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 16595,
                        "name": "destinationDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16578,
                        "src": "2491:19:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 16596,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16580,
                        "src": "2512:10:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 16597,
                        "name": "depositData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16582,
                        "src": "2524:11:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "id": 16598,
                        "name": "feeData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16584,
                        "src": "2537:7:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 16592,
                      "name": "_calculateFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16700,
                      "src": "2455:13:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint8_$_t_uint8_$_t_bytes32_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$returns$_t_uint256_$_t_address_$",
                        "typeString": "function (address,uint8,uint8,bytes32,bytes calldata,bytes calldata) view returns (uint256,address)"
                      }
                    },
                    "id": 16599,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2455:90:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_address_$",
                      "typeString": "tuple(uint256,address)"
                    }
                  },
                  "functionReturnParameters": 16591,
                  "id": 16600,
                  "nodeType": "Return",
                  "src": "2448:97:82"
                }
              ]
            },
            "documentation": {
              "id": 16572,
              "nodeType": "StructuredDocumentation",
              "src": "1653:557:82",
              "text": "@notice Calculates fee for deposit.\n@param sender Sender of the deposit.\n@param fromDomainID ID of the source chain.\n@param destinationDomainID ID of chain deposit will be bridged to.\n@param resourceID ResourceID to be used when making deposits.\n@param depositData Additional data about the deposit.\n@param feeData Additional data to be passed to the fee handler.\n@return fee Returns the fee amount.\n@return tokenAddress Returns the address of the token to be used for fee."
            },
            "functionSelector": "ef4f081f",
            "id": 16602,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateFee",
            "nameLocation": "2224:12:82",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 16586,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2386:8:82"
            },
            "parameters": {
              "id": 16585,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16574,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "2245:6:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16602,
                  "src": "2237:14:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16573,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2237:7:82",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16576,
                  "mutability": "mutable",
                  "name": "fromDomainID",
                  "nameLocation": "2259:12:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16602,
                  "src": "2253:18:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16575,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2253:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16578,
                  "mutability": "mutable",
                  "name": "destinationDomainID",
                  "nameLocation": "2279:19:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16602,
                  "src": "2273:25:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16577,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2273:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16580,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "2308:10:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16602,
                  "src": "2300:18:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 16579,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2300:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16582,
                  "mutability": "mutable",
                  "name": "depositData",
                  "nameLocation": "2335:11:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16602,
                  "src": "2320:26:82",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16581,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2320:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16584,
                  "mutability": "mutable",
                  "name": "feeData",
                  "nameLocation": "2363:7:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16602,
                  "src": "2348:22:82",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16583,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2348:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2236:135:82"
            },
            "returnParameters": {
              "id": 16591,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16588,
                  "mutability": "mutable",
                  "name": "fee",
                  "nameLocation": "2411:3:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16602,
                  "src": "2403:11:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16587,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2403:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16590,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nameLocation": "2424:12:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16602,
                  "src": "2416:20:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16589,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2416:7:82",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2402:35:82"
            },
            "scope": 16906,
            "src": "2215:337:82",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 16699,
              "nodeType": "Block",
              "src": "2773:798:82",
              "statements": [
                {
                  "assignments": [
                    16622
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16622,
                      "mutability": "mutable",
                      "name": "tokenHandler",
                      "nameLocation": "2791:12:82",
                      "nodeType": "VariableDeclaration",
                      "scope": 16699,
                      "src": "2783:20:82",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 16621,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2783:7:82",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16629,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 16627,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16610,
                        "src": "2858:10:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 16624,
                            "name": "_bridgeAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16205,
                            "src": "2814:14:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 16623,
                          "name": "IBridge",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18146,
                          "src": "2806:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBridge_$18146_$",
                            "typeString": "type(contract IBridge)"
                          }
                        },
                        "id": 16625,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2806:23:82",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBridge_$18146",
                          "typeString": "contract IBridge"
                        }
                      },
                      "id": 16626,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_resourceIDToHandlerAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18129,
                      "src": "2806:51:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 16628,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2806:63:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2783:86:82"
                },
                {
                  "expression": {
                    "id": 16637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 16630,
                      "name": "tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16619,
                      "src": "2879:12:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 16635,
                          "name": "resourceID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16610,
                          "src": "2954:10:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "arguments": [
                            {
                              "id": 16632,
                              "name": "tokenHandler",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16622,
                              "src": "2906:12:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 16631,
                            "name": "IERCHandler",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18195,
                            "src": "2894:11:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IERCHandler_$18195_$",
                              "typeString": "type(contract IERCHandler)"
                            }
                          },
                          "id": 16633,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2894:25:82",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERCHandler_$18195",
                            "typeString": "contract IERCHandler"
                          }
                        },
                        "id": 16634,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_resourceIDToTokenContractAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18194,
                        "src": "2894:59:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                          "typeString": "function (bytes32) view external returns (address)"
                        }
                      },
                      "id": 16636,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2894:71:82",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2879:86:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 16638,
                  "nodeType": "ExpressionStatement",
                  "src": "2879:86:82"
                },
                {
                  "assignments": [
                    16641
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16641,
                      "mutability": "mutable",
                      "name": "bounds",
                      "nameLocation": "2989:6:82",
                      "nodeType": "VariableDeclaration",
                      "scope": 16699,
                      "src": "2975:20:82",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                        "typeString": "struct PercentageERC20FeeHandler.Bounds"
                      },
                      "typeName": {
                        "id": 16640,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 16639,
                          "name": "Bounds",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 16537,
                          "src": "2975:6:82"
                        },
                        "referencedDeclaration": 16537,
                        "src": "2975:6:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Bounds_$16537_storage_ptr",
                          "typeString": "struct PercentageERC20FeeHandler.Bounds"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16645,
                  "initialValue": {
                    "baseExpression": {
                      "id": 16642,
                      "name": "_resourceIDToFeeBounds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16542,
                      "src": "2998:22:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Bounds_$16537_storage_$",
                        "typeString": "mapping(bytes32 => struct PercentageERC20FeeHandler.Bounds storage ref)"
                      }
                    },
                    "id": 16644,
                    "indexExpression": {
                      "id": 16643,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16610,
                      "src": "3021:10:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2998:34:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Bounds_$16537_storage",
                      "typeString": "struct PercentageERC20FeeHandler.Bounds storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2975:57:82"
                },
                {
                  "assignments": [
                    16647
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16647,
                      "mutability": "mutable",
                      "name": "depositAmount",
                      "nameLocation": "3052:13:82",
                      "nodeType": "VariableDeclaration",
                      "scope": 16699,
                      "src": "3044:21:82",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 16646,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3044:7:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16655,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 16650,
                        "name": "depositData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16612,
                        "src": "3080:11:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 16652,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3094:7:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 16651,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3094:7:82",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 16653,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "3093:9:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      ],
                      "expression": {
                        "id": 16648,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "3069:3:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 16649,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "3069:10:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 16654,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3069:34:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3043:60:82"
                },
                {
                  "expression": {
                    "id": 16666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 16656,
                      "name": "fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16617,
                      "src": "3114:3:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 16665,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 16663,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 16657,
                          "name": "depositAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16647,
                          "src": "3120:13:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "*",
                        "rightExpression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 16658,
                              "name": "_domainResourceIDToFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16213,
                              "src": "3136:22:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
                                "typeString": "mapping(uint8 => mapping(bytes32 => uint256))"
                              }
                            },
                            "id": 16660,
                            "indexExpression": {
                              "id": 16659,
                              "name": "destinationDomainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16608,
                              "src": "3159:19:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3136:43:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                              "typeString": "mapping(bytes32 => uint256)"
                            }
                          },
                          "id": 16662,
                          "indexExpression": {
                            "id": 16661,
                            "name": "resourceID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16610,
                            "src": "3180:10:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3136:55:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3120:71:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "id": 16664,
                        "name": "HUNDRED_PERCENT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16532,
                        "src": "3194:15:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "src": "3120:89:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3114:95:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 16667,
                  "nodeType": "ExpressionStatement",
                  "src": "3114:95:82"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 16671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 16668,
                      "name": "fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16617,
                      "src": "3275:3:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 16669,
                        "name": "bounds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16641,
                        "src": "3281:6:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                          "typeString": "struct PercentageERC20FeeHandler.Bounds memory"
                        }
                      },
                      "id": 16670,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "lowerBound",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16534,
                      "src": "3281:17:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "src": "3275:23:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 16686,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 16681,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 16678,
                          "name": "fee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16617,
                          "src": "3430:3:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "expression": {
                            "id": 16679,
                            "name": "bounds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16641,
                            "src": "3436:6:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                              "typeString": "struct PercentageERC20FeeHandler.Bounds memory"
                            }
                          },
                          "id": 16680,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "upperBound",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 16536,
                          "src": "3436:17:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "src": "3430:23:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "id": 16685,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 16682,
                            "name": "bounds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16641,
                            "src": "3457:6:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                              "typeString": "struct PercentageERC20FeeHandler.Bounds memory"
                            }
                          },
                          "id": 16683,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "upperBound",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 16536,
                          "src": "3457:17:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 16684,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3477:1:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3457:21:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "3430:48:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "id": 16693,
                    "nodeType": "IfStatement",
                    "src": "3426:102:82",
                    "trueBody": {
                      "id": 16692,
                      "nodeType": "Block",
                      "src": "3480:48:82",
                      "statements": [
                        {
                          "expression": {
                            "id": 16690,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 16687,
                              "name": "fee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16617,
                              "src": "3494:3:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "expression": {
                                "id": 16688,
                                "name": "bounds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16641,
                                "src": "3500:6:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                                  "typeString": "struct PercentageERC20FeeHandler.Bounds memory"
                                }
                              },
                              "id": 16689,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "upperBound",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 16536,
                              "src": "3500:17:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            "src": "3494:23:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 16691,
                          "nodeType": "ExpressionStatement",
                          "src": "3494:23:82"
                        }
                      ]
                    }
                  },
                  "id": 16694,
                  "nodeType": "IfStatement",
                  "src": "3271:257:82",
                  "trueBody": {
                    "id": 16677,
                    "nodeType": "Block",
                    "src": "3300:48:82",
                    "statements": [
                      {
                        "expression": {
                          "id": 16675,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 16672,
                            "name": "fee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16617,
                            "src": "3314:3:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 16673,
                              "name": "bounds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16641,
                              "src": "3320:6:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                                "typeString": "struct PercentageERC20FeeHandler.Bounds memory"
                              }
                            },
                            "id": 16674,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "lowerBound",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16534,
                            "src": "3320:17:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "3314:23:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 16676,
                        "nodeType": "ExpressionStatement",
                        "src": "3314:23:82"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "components": [
                      {
                        "id": 16695,
                        "name": "fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16617,
                        "src": "3546:3:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 16696,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16619,
                        "src": "3551:12:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "id": 16697,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3545:19:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_address_$",
                      "typeString": "tuple(uint256,address)"
                    }
                  },
                  "functionReturnParameters": 16620,
                  "id": 16698,
                  "nodeType": "Return",
                  "src": "3538:26:82"
                }
              ]
            },
            "id": 16700,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_calculateFee",
            "nameLocation": "2567:13:82",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16615,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16604,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "2589:6:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16700,
                  "src": "2581:14:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16603,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2581:7:82",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16606,
                  "mutability": "mutable",
                  "name": "fromDomainID",
                  "nameLocation": "2603:12:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16700,
                  "src": "2597:18:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16605,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2597:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16608,
                  "mutability": "mutable",
                  "name": "destinationDomainID",
                  "nameLocation": "2623:19:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16700,
                  "src": "2617:25:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16607,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2617:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16610,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "2652:10:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16700,
                  "src": "2644:18:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 16609,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2644:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16612,
                  "mutability": "mutable",
                  "name": "depositData",
                  "nameLocation": "2679:11:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16700,
                  "src": "2664:26:82",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16611,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2664:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16614,
                  "mutability": "mutable",
                  "name": "feeData",
                  "nameLocation": "2707:7:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16700,
                  "src": "2692:22:82",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16613,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2692:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2580:135:82"
            },
            "returnParameters": {
              "id": 16620,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16617,
                  "mutability": "mutable",
                  "name": "fee",
                  "nameLocation": "2746:3:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16700,
                  "src": "2738:11:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16616,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2738:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16619,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nameLocation": "2759:12:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16700,
                  "src": "2751:20:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16618,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2751:7:82",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2737:35:82"
            },
            "scope": 16906,
            "src": "2558:1013:82",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              16369
            ],
            "body": {
              "id": 16759,
              "nodeType": "Block",
              "src": "4215:372:82",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 16723,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 16720,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967281,
                            "src": "4233:3:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 16721,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "src": "4233:9:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 16722,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4246:1:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4233:14:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "636f6c6c6563744665653a206d73672e76616c756520213d2030",
                        "id": 16724,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4249:28:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7a65b4c7a91dd6ca2048801e909a05320ac2eef18e69adf5a94b31376fe1f645",
                          "typeString": "literal_string \"collectFee: msg.value != 0\""
                        },
                        "value": "collectFee: msg.value != 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7a65b4c7a91dd6ca2048801e909a05320ac2eef18e69adf5a94b31376fe1f645",
                          "typeString": "literal_string \"collectFee: msg.value != 0\""
                        }
                      ],
                      "id": 16719,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "4225:7:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16725,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4225:53:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16726,
                  "nodeType": "ExpressionStatement",
                  "src": "4225:53:82"
                },
                {
                  "assignments": [
                    16728,
                    16730
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16728,
                      "mutability": "mutable",
                      "name": "fee",
                      "nameLocation": "4298:3:82",
                      "nodeType": "VariableDeclaration",
                      "scope": 16759,
                      "src": "4290:11:82",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 16727,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4290:7:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 16730,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "nameLocation": "4311:12:82",
                      "nodeType": "VariableDeclaration",
                      "scope": 16759,
                      "src": "4303:20:82",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 16729,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4303:7:82",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16739,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 16732,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16703,
                        "src": "4341:6:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 16733,
                        "name": "fromDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16705,
                        "src": "4349:12:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 16734,
                        "name": "destinationDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16707,
                        "src": "4363:19:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 16735,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16709,
                        "src": "4384:10:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 16736,
                        "name": "depositData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16711,
                        "src": "4396:11:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "id": 16737,
                        "name": "feeData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16713,
                        "src": "4409:7:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 16731,
                      "name": "_calculateFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16700,
                      "src": "4327:13:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint8_$_t_uint8_$_t_bytes32_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$returns$_t_uint256_$_t_address_$",
                        "typeString": "function (address,uint8,uint8,bytes32,bytes calldata,bytes calldata) view returns (uint256,address)"
                      }
                    },
                    "id": 16738,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4327:90:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_address_$",
                      "typeString": "tuple(uint256,address)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4289:128:82"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 16741,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16730,
                        "src": "4437:12:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 16742,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16703,
                        "src": "4451:6:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 16745,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967268,
                            "src": "4467:4:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PercentageERC20FeeHandler_$16906",
                              "typeString": "contract PercentageERC20FeeHandler"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_PercentageERC20FeeHandler_$16906",
                              "typeString": "contract PercentageERC20FeeHandler"
                            }
                          ],
                          "id": 16744,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4459:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 16743,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4459:7:82",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 16746,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4459:13:82",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 16747,
                        "name": "fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16728,
                        "src": "4474:3:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 16740,
                      "name": "lockERC20",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9041,
                      "src": "4427:9:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 16748,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4427:51:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16749,
                  "nodeType": "ExpressionStatement",
                  "src": "4427:51:82"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 16751,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16703,
                        "src": "4507:6:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 16752,
                        "name": "fromDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16705,
                        "src": "4515:12:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 16753,
                        "name": "destinationDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16707,
                        "src": "4529:19:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 16754,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16709,
                        "src": "4550:10:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 16755,
                        "name": "fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16728,
                        "src": "4562:3:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 16756,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16730,
                        "src": "4567:12:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 16750,
                      "name": "FeeCollected",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18213,
                      "src": "4494:12:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint8_$_t_uint8_$_t_bytes32_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (address,uint8,uint8,bytes32,uint256,address)"
                      }
                    },
                    "id": 16757,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4494:86:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16758,
                  "nodeType": "EmitStatement",
                  "src": "4489:91:82"
                }
              ]
            },
            "documentation": {
              "id": 16701,
              "nodeType": "StructuredDocumentation",
              "src": "3581:429:82",
              "text": "@notice Collects fee for deposit.\n@param sender Sender of the deposit.\n@param fromDomainID ID of the source chain.\n@param destinationDomainID ID of chain deposit will be bridged to.\n@param resourceID ResourceID to be used when making deposits.\n@param depositData Additional data about the deposit.\n@param feeData Additional data to be passed to the fee handler."
            },
            "functionSelector": "25307065",
            "id": 16760,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 16717,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 16716,
                  "name": "onlyBridgeOrRouter",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 16241,
                  "src": "4196:18:82"
                },
                "nodeType": "ModifierInvocation",
                "src": "4196:18:82"
              }
            ],
            "name": "collectFee",
            "nameLocation": "4024:10:82",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 16715,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4187:8:82"
            },
            "parameters": {
              "id": 16714,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16703,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "4043:6:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16760,
                  "src": "4035:14:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16702,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4035:7:82",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16705,
                  "mutability": "mutable",
                  "name": "fromDomainID",
                  "nameLocation": "4057:12:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16760,
                  "src": "4051:18:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16704,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "4051:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16707,
                  "mutability": "mutable",
                  "name": "destinationDomainID",
                  "nameLocation": "4077:19:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16760,
                  "src": "4071:25:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16706,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "4071:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16709,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "4106:10:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16760,
                  "src": "4098:18:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 16708,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4098:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16711,
                  "mutability": "mutable",
                  "name": "depositData",
                  "nameLocation": "4133:11:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16760,
                  "src": "4118:26:82",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16710,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4118:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16713,
                  "mutability": "mutable",
                  "name": "feeData",
                  "nameLocation": "4161:7:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16760,
                  "src": "4146:22:82",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16712,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4146:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4034:135:82"
            },
            "returnParameters": {
              "id": 16718,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4215:0:82"
            },
            "scope": 16906,
            "src": "4015:572:82",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 16823,
              "nodeType": "Block",
              "src": "5067:579:82",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 16780,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          "id": 16775,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 16773,
                            "name": "newUpperBound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16767,
                            "src": "5085:13:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 16774,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5102:1:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5085:18:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              "id": 16778,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 16776,
                                "name": "newUpperBound",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16767,
                                "src": "5108:13:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "id": 16777,
                                "name": "newLowerBound",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16765,
                                "src": "5124:13:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "src": "5108:29:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 16779,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "5107:31:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5085:53:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "557070657220626f756e64206d757374206265206c6172676572207468616e206c6f77657220626f756e64206f722030",
                        "id": 16781,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5140:50:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_652f43be7e7702566082f3925a2196fcf8e8aaa543bd46c4af5c62ccb177eb74",
                          "typeString": "literal_string \"Upper bound must be larger than lower bound or 0\""
                        },
                        "value": "Upper bound must be larger than lower bound or 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_652f43be7e7702566082f3925a2196fcf8e8aaa543bd46c4af5c62ccb177eb74",
                          "typeString": "literal_string \"Upper bound must be larger than lower bound or 0\""
                        }
                      ],
                      "id": 16772,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5077:7:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16782,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5077:114:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16783,
                  "nodeType": "ExpressionStatement",
                  "src": "5077:114:82"
                },
                {
                  "assignments": [
                    16786
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16786,
                      "mutability": "mutable",
                      "name": "existingBounds",
                      "nameLocation": "5215:14:82",
                      "nodeType": "VariableDeclaration",
                      "scope": 16823,
                      "src": "5201:28:82",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                        "typeString": "struct PercentageERC20FeeHandler.Bounds"
                      },
                      "typeName": {
                        "id": 16785,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 16784,
                          "name": "Bounds",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 16537,
                          "src": "5201:6:82"
                        },
                        "referencedDeclaration": 16537,
                        "src": "5201:6:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Bounds_$16537_storage_ptr",
                          "typeString": "struct PercentageERC20FeeHandler.Bounds"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16790,
                  "initialValue": {
                    "baseExpression": {
                      "id": 16787,
                      "name": "_resourceIDToFeeBounds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16542,
                      "src": "5232:22:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Bounds_$16537_storage_$",
                        "typeString": "mapping(bytes32 => struct PercentageERC20FeeHandler.Bounds storage ref)"
                      }
                    },
                    "id": 16789,
                    "indexExpression": {
                      "id": 16788,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16763,
                      "src": "5255:10:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5232:34:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Bounds_$16537_storage",
                      "typeString": "struct PercentageERC20FeeHandler.Bounds storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5201:65:82"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 16800,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          "id": 16795,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 16792,
                              "name": "existingBounds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16786,
                              "src": "5284:14:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                                "typeString": "struct PercentageERC20FeeHandler.Bounds memory"
                              }
                            },
                            "id": 16793,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "lowerBound",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16534,
                            "src": "5284:25:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 16794,
                            "name": "newLowerBound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16765,
                            "src": "5313:13:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "5284:42:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          "id": 16799,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 16796,
                              "name": "existingBounds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16786,
                              "src": "5342:14:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                                "typeString": "struct PercentageERC20FeeHandler.Bounds memory"
                              }
                            },
                            "id": 16797,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "upperBound",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16536,
                            "src": "5342:25:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 16798,
                            "name": "newUpperBound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16767,
                            "src": "5371:13:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "5342:42:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5284:100:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "43757272656e7420626f756e64732061726520657175616c20746f206e657720626f756e6473",
                        "id": 16801,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5398:40:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_36b74e5f379e2a998a7d6182040f3657252741580e6591c18971ddc1cbd71b7e",
                          "typeString": "literal_string \"Current bounds are equal to new bounds\""
                        },
                        "value": "Current bounds are equal to new bounds"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_36b74e5f379e2a998a7d6182040f3657252741580e6591c18971ddc1cbd71b7e",
                          "typeString": "literal_string \"Current bounds are equal to new bounds\""
                        }
                      ],
                      "id": 16791,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5276:7:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16802,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5276:172:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16803,
                  "nodeType": "ExpressionStatement",
                  "src": "5276:172:82"
                },
                {
                  "assignments": [
                    16806
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16806,
                      "mutability": "mutable",
                      "name": "newBounds",
                      "nameLocation": "5473:9:82",
                      "nodeType": "VariableDeclaration",
                      "scope": 16823,
                      "src": "5459:23:82",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                        "typeString": "struct PercentageERC20FeeHandler.Bounds"
                      },
                      "typeName": {
                        "id": 16805,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 16804,
                          "name": "Bounds",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 16537,
                          "src": "5459:6:82"
                        },
                        "referencedDeclaration": 16537,
                        "src": "5459:6:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Bounds_$16537_storage_ptr",
                          "typeString": "struct PercentageERC20FeeHandler.Bounds"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16811,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 16808,
                        "name": "newLowerBound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16765,
                        "src": "5492:13:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "id": 16809,
                        "name": "newUpperBound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16767,
                        "src": "5507:13:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "id": 16807,
                      "name": "Bounds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16537,
                      "src": "5485:6:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_Bounds_$16537_storage_ptr_$",
                        "typeString": "type(struct PercentageERC20FeeHandler.Bounds storage pointer)"
                      }
                    },
                    "id": 16810,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5485:36:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                      "typeString": "struct PercentageERC20FeeHandler.Bounds memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5459:62:82"
                },
                {
                  "expression": {
                    "id": 16816,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 16812,
                        "name": "_resourceIDToFeeBounds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16542,
                        "src": "5531:22:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Bounds_$16537_storage_$",
                          "typeString": "mapping(bytes32 => struct PercentageERC20FeeHandler.Bounds storage ref)"
                        }
                      },
                      "id": 16814,
                      "indexExpression": {
                        "id": 16813,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16763,
                        "src": "5554:10:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5531:34:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Bounds_$16537_storage",
                        "typeString": "struct PercentageERC20FeeHandler.Bounds storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 16815,
                      "name": "newBounds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16806,
                      "src": "5568:9:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                        "typeString": "struct PercentageERC20FeeHandler.Bounds memory"
                      }
                    },
                    "src": "5531:46:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Bounds_$16537_storage",
                      "typeString": "struct PercentageERC20FeeHandler.Bounds storage ref"
                    }
                  },
                  "id": 16817,
                  "nodeType": "ExpressionStatement",
                  "src": "5531:46:82"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 16819,
                        "name": "newLowerBound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16765,
                        "src": "5610:13:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "id": 16820,
                        "name": "newUpperBound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16767,
                        "src": "5625:13:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "id": 16818,
                      "name": "FeeBoundsChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16548,
                      "src": "5593:16:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 16821,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5593:46:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16822,
                  "nodeType": "EmitStatement",
                  "src": "5588:51:82"
                }
              ]
            },
            "documentation": {
              "id": 16761,
              "nodeType": "StructuredDocumentation",
              "src": "4593:359:82",
              "text": "@notice Sets new value for lower and upper fee bounds, both are in token amount.\n@notice Only callable by admin.\n@param resourceID ResourceID for which new fee bounds will be set.\n@param newLowerBound Value {_newLowerBound} will be updated to.\n@param newUpperBound Value {_newUpperBound} will be updated to."
            },
            "functionSelector": "d4e6bc96",
            "id": 16824,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 16770,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 16769,
                  "name": "onlyAdmin",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 16234,
                  "src": "5057:9:82"
                },
                "nodeType": "ModifierInvocation",
                "src": "5057:9:82"
              }
            ],
            "name": "changeFeeBounds",
            "nameLocation": "4966:15:82",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16768,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16763,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "4990:10:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16824,
                  "src": "4982:18:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 16762,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4982:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16765,
                  "mutability": "mutable",
                  "name": "newLowerBound",
                  "nameLocation": "5010:13:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16824,
                  "src": "5002:21:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 16764,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "5002:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16767,
                  "mutability": "mutable",
                  "name": "newUpperBound",
                  "nameLocation": "5033:13:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16824,
                  "src": "5025:21:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 16766,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "5025:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4981:66:82"
            },
            "returnParameters": {
              "id": 16771,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5067:0:82"
            },
            "scope": 16906,
            "src": "4957:689:82",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 16904,
              "nodeType": "Block",
              "src": "6213:523:82",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 16843,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 16839,
                            "name": "addrs",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16830,
                            "src": "6231:5:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 16840,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "6231:12:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 16841,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16833,
                            "src": "6247:7:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 16842,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "6247:14:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6231:30:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "61646472735b5d2c20616d6f756e74735b5d3a2064696666206c656e677468",
                        "id": 16844,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6263:33:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6294e89c3434efe3f2b9f4527205255a0d63a93ae07514ac7ac8f6435286aa9b",
                          "typeString": "literal_string \"addrs[], amounts[]: diff length\""
                        },
                        "value": "addrs[], amounts[]: diff length"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6294e89c3434efe3f2b9f4527205255a0d63a93ae07514ac7ac8f6435286aa9b",
                          "typeString": "literal_string \"addrs[], amounts[]: diff length\""
                        }
                      ],
                      "id": 16838,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "6223:7:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6223:74:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16846,
                  "nodeType": "ExpressionStatement",
                  "src": "6223:74:82"
                },
                {
                  "assignments": [
                    16848
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16848,
                      "mutability": "mutable",
                      "name": "tokenHandler",
                      "nameLocation": "6315:12:82",
                      "nodeType": "VariableDeclaration",
                      "scope": 16904,
                      "src": "6307:20:82",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 16847,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6307:7:82",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16855,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 16853,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16827,
                        "src": "6382:10:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 16850,
                            "name": "_bridgeAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16205,
                            "src": "6338:14:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 16849,
                          "name": "IBridge",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18146,
                          "src": "6330:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBridge_$18146_$",
                            "typeString": "type(contract IBridge)"
                          }
                        },
                        "id": 16851,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6330:23:82",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBridge_$18146",
                          "typeString": "contract IBridge"
                        }
                      },
                      "id": 16852,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_resourceIDToHandlerAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18129,
                      "src": "6330:51:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 16854,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6330:63:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6307:86:82"
                },
                {
                  "assignments": [
                    16857
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16857,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "nameLocation": "6411:12:82",
                      "nodeType": "VariableDeclaration",
                      "scope": 16904,
                      "src": "6403:20:82",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 16856,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6403:7:82",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16864,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 16862,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16827,
                        "src": "6486:10:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 16859,
                            "name": "tokenHandler",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16848,
                            "src": "6438:12:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 16858,
                          "name": "IERCHandler",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18195,
                          "src": "6426:11:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERCHandler_$18195_$",
                            "typeString": "type(contract IERCHandler)"
                          }
                        },
                        "id": 16860,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6426:25:82",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERCHandler_$18195",
                          "typeString": "contract IERCHandler"
                        }
                      },
                      "id": 16861,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_resourceIDToTokenContractAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18194,
                      "src": "6426:59:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 16863,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6426:71:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6403:94:82"
                },
                {
                  "body": {
                    "id": 16902,
                    "nodeType": "Block",
                    "src": "6550:180:82",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "baseExpression": {
                                "id": 16876,
                                "name": "addrs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16830,
                                "src": "6564:5:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 16878,
                              "indexExpression": {
                                "id": 16877,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16866,
                                "src": "6570:1:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6564:8:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 16879,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mustNotBeZero",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19136,
                            "src": "6564:22:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_address_$bound_to$_t_address_$",
                              "typeString": "function (address) pure returns (address)"
                            }
                          },
                          "id": 16880,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6564:24:82",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 16881,
                        "nodeType": "ExpressionStatement",
                        "src": "6564:24:82"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 16883,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16857,
                              "src": "6615:12:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 16884,
                                "name": "addrs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16830,
                                "src": "6629:5:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 16886,
                              "indexExpression": {
                                "id": 16885,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16866,
                                "src": "6635:1:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6629:8:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 16887,
                                "name": "amounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16833,
                                "src": "6639:7:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 16889,
                              "indexExpression": {
                                "id": 16888,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16866,
                                "src": "6647:1:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6639:10:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 16882,
                            "name": "releaseERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9065,
                            "src": "6602:12:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 16890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6602:48:82",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 16891,
                        "nodeType": "ExpressionStatement",
                        "src": "6602:48:82"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 16893,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16857,
                              "src": "6684:12:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 16894,
                                "name": "addrs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16830,
                                "src": "6698:5:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 16896,
                              "indexExpression": {
                                "id": 16895,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16866,
                                "src": "6704:1:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6698:8:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 16897,
                                "name": "amounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16833,
                                "src": "6708:7:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 16899,
                              "indexExpression": {
                                "id": 16898,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16866,
                                "src": "6716:1:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6708:10:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 16892,
                            "name": "FeeDistributed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18222,
                            "src": "6669:14:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 16900,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6669:50:82",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 16901,
                        "nodeType": "EmitStatement",
                        "src": "6664:55:82"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 16872,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 16869,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16866,
                      "src": "6527:1:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 16870,
                        "name": "addrs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16830,
                        "src": "6531:5:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 16871,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "6531:12:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6527:16:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 16903,
                  "initializationExpression": {
                    "assignments": [
                      16866
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 16866,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "6520:1:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 16903,
                        "src": "6512:9:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 16865,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6512:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 16868,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 16867,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6524:1:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "6512:13:82"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 16874,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6545:3:82",
                      "subExpression": {
                        "id": 16873,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16866,
                        "src": "6545:1:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 16875,
                    "nodeType": "ExpressionStatement",
                    "src": "6545:3:82"
                  },
                  "nodeType": "ForStatement",
                  "src": "6507:223:82"
                }
              ]
            },
            "documentation": {
              "id": 16825,
              "nodeType": "StructuredDocumentation",
              "src": "5656:436:82",
              "text": "@notice Transfers tokens from the contract to the specified addresses. The parameters addrs and amounts are mapped 1-1.\nThis means that the address at index 0 for addrs will receive the amount of tokens from amounts at index 0.\n@param resourceID ResourceID of the token.\n@param addrs Array of addresses to transfer {amounts} to.\n@param amounts Array of amounts to transfer to {addrs}."
            },
            "functionSelector": "d48f9534",
            "id": 16905,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 16836,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 16835,
                  "name": "onlyAdmin",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 16234,
                  "src": "6203:9:82"
                },
                "nodeType": "ModifierInvocation",
                "src": "6203:9:82"
              }
            ],
            "name": "transferERC20Fee",
            "nameLocation": "6106:16:82",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16834,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16827,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "6131:10:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16905,
                  "src": "6123:18:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 16826,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6123:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16830,
                  "mutability": "mutable",
                  "name": "addrs",
                  "nameLocation": "6162:5:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16905,
                  "src": "6143:24:82",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 16828,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "6143:7:82",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 16829,
                    "nodeType": "ArrayTypeName",
                    "src": "6143:9:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16833,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nameLocation": "6185:7:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16905,
                  "src": "6169:23:82",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 16831,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "6169:4:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 16832,
                    "nodeType": "ArrayTypeName",
                    "src": "6169:6:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6122:71:82"
            },
            "returnParameters": {
              "id": 16837,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6213:0:82"
            },
            "scope": 16906,
            "src": "6097:639:82",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 16907,
        "src": "457:6281:82",
        "usedErrors": [
          16221,
          19110
        ]
      }
    ],
    "src": "76:6663:82"
  },
  "legacyAST": {
    "absolutePath": "project:/contracts/handlers/fee/PercentageERC20FeeHandler.sol",
    "exportedSymbols": {
      "AccessControl": [
        308
      ],
      "AccessControlEnumerable": [
        433
      ],
      "BasicFeeHandler": [
        16514
      ],
      "Context": [
        5305
      ],
      "ERC165": [
        6167
      ],
      "ERC20": [
        2990
      ],
      "ERC20Burnable": [
        3112
      ],
      "ERC20Pausable": [
        3149
      ],
      "ERC20PresetMinterPauser": [
        3515
      ],
      "ERC20Safe": [
        9222
      ],
      "EnumerableSet": [
        7373
      ],
      "IAccessControl": [
        506
      ],
      "IAccessControlEnumerable": [
        531
      ],
      "IBridge": [
        18146
      ],
      "IERC165": [
        6381
      ],
      "IERC20": [
        3068
      ],
      "IERC20Metadata": [
        3174
      ],
      "IERCHandler": [
        18195
      ],
      "Pausable": [
        728
      ],
      "PercentageERC20FeeHandler": [
        16906
      ],
      "SanityChecks": [
        19158
      ],
      "Strings": [
        5582
      ]
    },
    "id": 16907,
    "license": "BUSL-1.1",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 16516,
        "literals": [
          "solidity",
          "0.8",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "76:23:82"
      },
      {
        "absolutePath": "project:/contracts/interfaces/IBridge.sol",
        "file": "../../interfaces/IBridge.sol",
        "id": 16517,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 16907,
        "sourceUnit": 18147,
        "src": "101:38:82",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/interfaces/IERCHandler.sol",
        "file": "../../interfaces/IERCHandler.sol",
        "id": 16518,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 16907,
        "sourceUnit": 18196,
        "src": "140:42:82",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/ERC20Safe.sol",
        "file": "../../ERC20Safe.sol",
        "id": 16519,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 16907,
        "sourceUnit": 9223,
        "src": "183:29:82",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/utils/SanityChecks.sol",
        "file": "../../utils/SanityChecks.sol",
        "id": 16520,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 16907,
        "sourceUnit": 19159,
        "src": "213:38:82",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/handlers/fee/BasicFeeHandler.sol",
        "file": "./BasicFeeHandler.sol",
        "id": 16522,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 16907,
        "sourceUnit": 16515,
        "src": "252:56:82",
        "symbolAliases": [
          {
            "foreign": {
              "id": 16521,
              "name": "BasicFeeHandler",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "261:15:82",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 16524,
              "name": "BasicFeeHandler",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 16514,
              "src": "495:15:82"
            },
            "id": 16525,
            "nodeType": "InheritanceSpecifier",
            "src": "495:15:82"
          },
          {
            "baseName": {
              "id": 16526,
              "name": "ERC20Safe",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 9222,
              "src": "512:9:82"
            },
            "id": 16527,
            "nodeType": "InheritanceSpecifier",
            "src": "512:9:82"
          }
        ],
        "canonicalName": "PercentageERC20FeeHandler",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 16523,
          "nodeType": "StructuredDocumentation",
          "src": "310:146:82",
          "text": "@title Handles deposit fees.\n@author ChainSafe Systems.\n@notice This contract is intended to be used with the Bridge contract."
        },
        "fullyImplemented": true,
        "id": 16906,
        "linearizedBaseContracts": [
          16906,
          9222,
          16514,
          18612,
          5305,
          18265
        ],
        "name": "PercentageERC20FeeHandler",
        "nameLocation": "466:25:82",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 16529,
            "libraryName": {
              "id": 16528,
              "name": "SanityChecks",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 19158,
              "src": "534:12:82"
            },
            "nodeType": "UsingForDirective",
            "src": "528:25:82"
          },
          {
            "constant": true,
            "functionSelector": "6ed93dd0",
            "id": 16532,
            "mutability": "constant",
            "name": "HUNDRED_PERCENT",
            "nameLocation": "582:15:82",
            "nodeType": "VariableDeclaration",
            "scope": 16906,
            "src": "559:44:82",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 16530,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "559:6:82",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "value": {
              "hexValue": "316538",
              "id": 16531,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "600:3:82",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_100000000_by_1",
                "typeString": "int_const 100000000"
              },
              "value": "1e8"
            },
            "visibility": "public"
          },
          {
            "canonicalName": "PercentageERC20FeeHandler.Bounds",
            "id": 16537,
            "members": [
              {
                "constant": false,
                "id": 16534,
                "mutability": "mutable",
                "name": "lowerBound",
                "nameLocation": "860:10:82",
                "nodeType": "VariableDeclaration",
                "scope": 16537,
                "src": "852:18:82",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 16533,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "852:7:82",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 16536,
                "mutability": "mutable",
                "name": "upperBound",
                "nameLocation": "915:10:82",
                "nodeType": "VariableDeclaration",
                "scope": 16537,
                "src": "907:18:82",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 16535,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "907:7:82",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Bounds",
            "nameLocation": "835:6:82",
            "nodeType": "StructDefinition",
            "scope": 16906,
            "src": "828:131:82",
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "769d4643",
            "id": 16542,
            "mutability": "mutable",
            "name": "_resourceIDToFeeBounds",
            "nameLocation": "999:22:82",
            "nodeType": "VariableDeclaration",
            "scope": 16906,
            "src": "965:56:82",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Bounds_$16537_storage_$",
              "typeString": "mapping(bytes32 => struct PercentageERC20FeeHandler.Bounds)"
            },
            "typeName": {
              "id": 16541,
              "keyType": {
                "id": 16538,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "973:7:82",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "965:26:82",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Bounds_$16537_storage_$",
                "typeString": "mapping(bytes32 => struct PercentageERC20FeeHandler.Bounds)"
              },
              "valueType": {
                "id": 16540,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 16539,
                  "name": "Bounds",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 16537,
                  "src": "984:6:82"
                },
                "referencedDeclaration": 16537,
                "src": "984:6:82",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Bounds_$16537_storage_ptr",
                  "typeString": "struct PercentageERC20FeeHandler.Bounds"
                }
              }
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "id": 16548,
            "name": "FeeBoundsChanged",
            "nameLocation": "1034:16:82",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 16547,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16544,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newLowerBound",
                  "nameLocation": "1059:13:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16548,
                  "src": "1051:21:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16543,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1051:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16546,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newUpperBound",
                  "nameLocation": "1082:13:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16548,
                  "src": "1074:21:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16545,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1074:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1050:46:82"
            },
            "src": "1028:69:82"
          },
          {
            "body": {
              "id": 16560,
              "nodeType": "Block",
              "src": "1439:2:82",
              "statements": []
            },
            "documentation": {
              "id": 16549,
              "nodeType": "StructuredDocumentation",
              "src": "1103:185:82",
              "text": "@param bridgeAddress Contract address of previously deployed Bridge.\n@param feeHandlerRouterAddress Contract address of previously deployed FeeHandlerRouter."
            },
            "id": 16561,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 16556,
                    "name": "bridgeAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 16551,
                    "src": "1399:13:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "id": 16557,
                    "name": "feeHandlerRouterAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 16553,
                    "src": "1414:23:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 16558,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 16555,
                  "name": "BasicFeeHandler",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 16514,
                  "src": "1383:15:82"
                },
                "nodeType": "ModifierInvocation",
                "src": "1383:55:82"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16554,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16551,
                  "mutability": "mutable",
                  "name": "bridgeAddress",
                  "nameLocation": "1322:13:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16561,
                  "src": "1314:21:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16550,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1314:7:82",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16553,
                  "mutability": "mutable",
                  "name": "feeHandlerRouterAddress",
                  "nameLocation": "1353:23:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16561,
                  "src": "1345:31:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16552,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1345:7:82",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1304:78:82"
            },
            "returnParameters": {
              "id": 16559,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1439:0:82"
            },
            "scope": 16906,
            "src": "1293:148:82",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              16291
            ],
            "body": {
              "id": 16570,
              "nodeType": "Block",
              "src": "1587:36:82",
              "statements": [
                {
                  "expression": {
                    "hexValue": "70657263656e74616765",
                    "id": 16568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1604:12:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_6946155c1c1cae30e8538fccb112e0261b85cd861c40208197da72588b8693b0",
                      "typeString": "literal_string \"percentage\""
                    },
                    "value": "percentage"
                  },
                  "functionReturnParameters": 16567,
                  "id": 16569,
                  "nodeType": "Return",
                  "src": "1597:19:82"
                }
              ]
            },
            "documentation": {
              "id": 16562,
              "nodeType": "StructuredDocumentation",
              "src": "1447:64:82",
              "text": "@notice Getter function for fee handler type"
            },
            "functionSelector": "542774b5",
            "id": 16571,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "feeHandlerType",
            "nameLocation": "1525:14:82",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 16564,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1549:8:82"
            },
            "parameters": {
              "id": 16563,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1539:2:82"
            },
            "returnParameters": {
              "id": 16567,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16566,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 16571,
                  "src": "1572:13:82",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 16565,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1572:6:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1571:15:82"
            },
            "scope": 16906,
            "src": "1516:107:82",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              16401
            ],
            "body": {
              "id": 16601,
              "nodeType": "Block",
              "src": "2438:114:82",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 16593,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16574,
                        "src": "2469:6:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 16594,
                        "name": "fromDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16576,
                        "src": "2477:12:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 16595,
                        "name": "destinationDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16578,
                        "src": "2491:19:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 16596,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16580,
                        "src": "2512:10:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 16597,
                        "name": "depositData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16582,
                        "src": "2524:11:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "id": 16598,
                        "name": "feeData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16584,
                        "src": "2537:7:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 16592,
                      "name": "_calculateFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16700,
                      "src": "2455:13:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint8_$_t_uint8_$_t_bytes32_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$returns$_t_uint256_$_t_address_$",
                        "typeString": "function (address,uint8,uint8,bytes32,bytes calldata,bytes calldata) view returns (uint256,address)"
                      }
                    },
                    "id": 16599,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2455:90:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_address_$",
                      "typeString": "tuple(uint256,address)"
                    }
                  },
                  "functionReturnParameters": 16591,
                  "id": 16600,
                  "nodeType": "Return",
                  "src": "2448:97:82"
                }
              ]
            },
            "documentation": {
              "id": 16572,
              "nodeType": "StructuredDocumentation",
              "src": "1653:557:82",
              "text": "@notice Calculates fee for deposit.\n@param sender Sender of the deposit.\n@param fromDomainID ID of the source chain.\n@param destinationDomainID ID of chain deposit will be bridged to.\n@param resourceID ResourceID to be used when making deposits.\n@param depositData Additional data about the deposit.\n@param feeData Additional data to be passed to the fee handler.\n@return fee Returns the fee amount.\n@return tokenAddress Returns the address of the token to be used for fee."
            },
            "functionSelector": "ef4f081f",
            "id": 16602,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateFee",
            "nameLocation": "2224:12:82",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 16586,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2386:8:82"
            },
            "parameters": {
              "id": 16585,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16574,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "2245:6:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16602,
                  "src": "2237:14:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16573,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2237:7:82",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16576,
                  "mutability": "mutable",
                  "name": "fromDomainID",
                  "nameLocation": "2259:12:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16602,
                  "src": "2253:18:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16575,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2253:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16578,
                  "mutability": "mutable",
                  "name": "destinationDomainID",
                  "nameLocation": "2279:19:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16602,
                  "src": "2273:25:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16577,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2273:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16580,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "2308:10:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16602,
                  "src": "2300:18:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 16579,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2300:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16582,
                  "mutability": "mutable",
                  "name": "depositData",
                  "nameLocation": "2335:11:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16602,
                  "src": "2320:26:82",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16581,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2320:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16584,
                  "mutability": "mutable",
                  "name": "feeData",
                  "nameLocation": "2363:7:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16602,
                  "src": "2348:22:82",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16583,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2348:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2236:135:82"
            },
            "returnParameters": {
              "id": 16591,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16588,
                  "mutability": "mutable",
                  "name": "fee",
                  "nameLocation": "2411:3:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16602,
                  "src": "2403:11:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16587,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2403:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16590,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nameLocation": "2424:12:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16602,
                  "src": "2416:20:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16589,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2416:7:82",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2402:35:82"
            },
            "scope": 16906,
            "src": "2215:337:82",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 16699,
              "nodeType": "Block",
              "src": "2773:798:82",
              "statements": [
                {
                  "assignments": [
                    16622
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16622,
                      "mutability": "mutable",
                      "name": "tokenHandler",
                      "nameLocation": "2791:12:82",
                      "nodeType": "VariableDeclaration",
                      "scope": 16699,
                      "src": "2783:20:82",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 16621,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2783:7:82",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16629,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 16627,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16610,
                        "src": "2858:10:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 16624,
                            "name": "_bridgeAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16205,
                            "src": "2814:14:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 16623,
                          "name": "IBridge",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18146,
                          "src": "2806:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBridge_$18146_$",
                            "typeString": "type(contract IBridge)"
                          }
                        },
                        "id": 16625,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2806:23:82",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBridge_$18146",
                          "typeString": "contract IBridge"
                        }
                      },
                      "id": 16626,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_resourceIDToHandlerAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18129,
                      "src": "2806:51:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 16628,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2806:63:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2783:86:82"
                },
                {
                  "expression": {
                    "id": 16637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 16630,
                      "name": "tokenAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16619,
                      "src": "2879:12:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 16635,
                          "name": "resourceID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16610,
                          "src": "2954:10:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "arguments": [
                            {
                              "id": 16632,
                              "name": "tokenHandler",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16622,
                              "src": "2906:12:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 16631,
                            "name": "IERCHandler",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18195,
                            "src": "2894:11:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IERCHandler_$18195_$",
                              "typeString": "type(contract IERCHandler)"
                            }
                          },
                          "id": 16633,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2894:25:82",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERCHandler_$18195",
                            "typeString": "contract IERCHandler"
                          }
                        },
                        "id": 16634,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_resourceIDToTokenContractAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18194,
                        "src": "2894:59:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                          "typeString": "function (bytes32) view external returns (address)"
                        }
                      },
                      "id": 16636,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2894:71:82",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2879:86:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 16638,
                  "nodeType": "ExpressionStatement",
                  "src": "2879:86:82"
                },
                {
                  "assignments": [
                    16641
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16641,
                      "mutability": "mutable",
                      "name": "bounds",
                      "nameLocation": "2989:6:82",
                      "nodeType": "VariableDeclaration",
                      "scope": 16699,
                      "src": "2975:20:82",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                        "typeString": "struct PercentageERC20FeeHandler.Bounds"
                      },
                      "typeName": {
                        "id": 16640,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 16639,
                          "name": "Bounds",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 16537,
                          "src": "2975:6:82"
                        },
                        "referencedDeclaration": 16537,
                        "src": "2975:6:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Bounds_$16537_storage_ptr",
                          "typeString": "struct PercentageERC20FeeHandler.Bounds"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16645,
                  "initialValue": {
                    "baseExpression": {
                      "id": 16642,
                      "name": "_resourceIDToFeeBounds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16542,
                      "src": "2998:22:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Bounds_$16537_storage_$",
                        "typeString": "mapping(bytes32 => struct PercentageERC20FeeHandler.Bounds storage ref)"
                      }
                    },
                    "id": 16644,
                    "indexExpression": {
                      "id": 16643,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16610,
                      "src": "3021:10:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2998:34:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Bounds_$16537_storage",
                      "typeString": "struct PercentageERC20FeeHandler.Bounds storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2975:57:82"
                },
                {
                  "assignments": [
                    16647
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16647,
                      "mutability": "mutable",
                      "name": "depositAmount",
                      "nameLocation": "3052:13:82",
                      "nodeType": "VariableDeclaration",
                      "scope": 16699,
                      "src": "3044:21:82",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 16646,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3044:7:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16655,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 16650,
                        "name": "depositData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16612,
                        "src": "3080:11:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 16652,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3094:7:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 16651,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3094:7:82",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 16653,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "3093:9:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      ],
                      "expression": {
                        "id": 16648,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "3069:3:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 16649,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "3069:10:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 16654,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3069:34:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3043:60:82"
                },
                {
                  "expression": {
                    "id": 16666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 16656,
                      "name": "fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16617,
                      "src": "3114:3:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 16665,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 16663,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 16657,
                          "name": "depositAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16647,
                          "src": "3120:13:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "*",
                        "rightExpression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 16658,
                              "name": "_domainResourceIDToFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16213,
                              "src": "3136:22:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
                                "typeString": "mapping(uint8 => mapping(bytes32 => uint256))"
                              }
                            },
                            "id": 16660,
                            "indexExpression": {
                              "id": 16659,
                              "name": "destinationDomainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16608,
                              "src": "3159:19:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3136:43:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                              "typeString": "mapping(bytes32 => uint256)"
                            }
                          },
                          "id": 16662,
                          "indexExpression": {
                            "id": 16661,
                            "name": "resourceID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16610,
                            "src": "3180:10:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3136:55:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3120:71:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "id": 16664,
                        "name": "HUNDRED_PERCENT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16532,
                        "src": "3194:15:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "src": "3120:89:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3114:95:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 16667,
                  "nodeType": "ExpressionStatement",
                  "src": "3114:95:82"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 16671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 16668,
                      "name": "fee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16617,
                      "src": "3275:3:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 16669,
                        "name": "bounds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16641,
                        "src": "3281:6:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                          "typeString": "struct PercentageERC20FeeHandler.Bounds memory"
                        }
                      },
                      "id": 16670,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "lowerBound",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16534,
                      "src": "3281:17:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "src": "3275:23:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 16686,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 16681,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 16678,
                          "name": "fee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16617,
                          "src": "3430:3:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "expression": {
                            "id": 16679,
                            "name": "bounds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16641,
                            "src": "3436:6:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                              "typeString": "struct PercentageERC20FeeHandler.Bounds memory"
                            }
                          },
                          "id": 16680,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "upperBound",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 16536,
                          "src": "3436:17:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "src": "3430:23:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "id": 16685,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 16682,
                            "name": "bounds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16641,
                            "src": "3457:6:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                              "typeString": "struct PercentageERC20FeeHandler.Bounds memory"
                            }
                          },
                          "id": 16683,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "upperBound",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 16536,
                          "src": "3457:17:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 16684,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3477:1:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3457:21:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "3430:48:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "id": 16693,
                    "nodeType": "IfStatement",
                    "src": "3426:102:82",
                    "trueBody": {
                      "id": 16692,
                      "nodeType": "Block",
                      "src": "3480:48:82",
                      "statements": [
                        {
                          "expression": {
                            "id": 16690,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 16687,
                              "name": "fee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16617,
                              "src": "3494:3:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "expression": {
                                "id": 16688,
                                "name": "bounds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16641,
                                "src": "3500:6:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                                  "typeString": "struct PercentageERC20FeeHandler.Bounds memory"
                                }
                              },
                              "id": 16689,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "upperBound",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 16536,
                              "src": "3500:17:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            "src": "3494:23:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 16691,
                          "nodeType": "ExpressionStatement",
                          "src": "3494:23:82"
                        }
                      ]
                    }
                  },
                  "id": 16694,
                  "nodeType": "IfStatement",
                  "src": "3271:257:82",
                  "trueBody": {
                    "id": 16677,
                    "nodeType": "Block",
                    "src": "3300:48:82",
                    "statements": [
                      {
                        "expression": {
                          "id": 16675,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 16672,
                            "name": "fee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16617,
                            "src": "3314:3:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 16673,
                              "name": "bounds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16641,
                              "src": "3320:6:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                                "typeString": "struct PercentageERC20FeeHandler.Bounds memory"
                              }
                            },
                            "id": 16674,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "lowerBound",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16534,
                            "src": "3320:17:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "3314:23:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 16676,
                        "nodeType": "ExpressionStatement",
                        "src": "3314:23:82"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "components": [
                      {
                        "id": 16695,
                        "name": "fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16617,
                        "src": "3546:3:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 16696,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16619,
                        "src": "3551:12:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "id": 16697,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3545:19:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_address_$",
                      "typeString": "tuple(uint256,address)"
                    }
                  },
                  "functionReturnParameters": 16620,
                  "id": 16698,
                  "nodeType": "Return",
                  "src": "3538:26:82"
                }
              ]
            },
            "id": 16700,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_calculateFee",
            "nameLocation": "2567:13:82",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16615,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16604,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "2589:6:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16700,
                  "src": "2581:14:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16603,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2581:7:82",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16606,
                  "mutability": "mutable",
                  "name": "fromDomainID",
                  "nameLocation": "2603:12:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16700,
                  "src": "2597:18:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16605,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2597:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16608,
                  "mutability": "mutable",
                  "name": "destinationDomainID",
                  "nameLocation": "2623:19:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16700,
                  "src": "2617:25:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16607,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2617:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16610,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "2652:10:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16700,
                  "src": "2644:18:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 16609,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2644:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16612,
                  "mutability": "mutable",
                  "name": "depositData",
                  "nameLocation": "2679:11:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16700,
                  "src": "2664:26:82",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16611,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2664:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16614,
                  "mutability": "mutable",
                  "name": "feeData",
                  "nameLocation": "2707:7:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16700,
                  "src": "2692:22:82",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16613,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2692:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2580:135:82"
            },
            "returnParameters": {
              "id": 16620,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16617,
                  "mutability": "mutable",
                  "name": "fee",
                  "nameLocation": "2746:3:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16700,
                  "src": "2738:11:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16616,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2738:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16619,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nameLocation": "2759:12:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16700,
                  "src": "2751:20:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16618,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2751:7:82",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2737:35:82"
            },
            "scope": 16906,
            "src": "2558:1013:82",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              16369
            ],
            "body": {
              "id": 16759,
              "nodeType": "Block",
              "src": "4215:372:82",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 16723,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 16720,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967281,
                            "src": "4233:3:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 16721,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "src": "4233:9:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 16722,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4246:1:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4233:14:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "636f6c6c6563744665653a206d73672e76616c756520213d2030",
                        "id": 16724,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4249:28:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7a65b4c7a91dd6ca2048801e909a05320ac2eef18e69adf5a94b31376fe1f645",
                          "typeString": "literal_string \"collectFee: msg.value != 0\""
                        },
                        "value": "collectFee: msg.value != 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7a65b4c7a91dd6ca2048801e909a05320ac2eef18e69adf5a94b31376fe1f645",
                          "typeString": "literal_string \"collectFee: msg.value != 0\""
                        }
                      ],
                      "id": 16719,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "4225:7:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16725,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4225:53:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16726,
                  "nodeType": "ExpressionStatement",
                  "src": "4225:53:82"
                },
                {
                  "assignments": [
                    16728,
                    16730
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16728,
                      "mutability": "mutable",
                      "name": "fee",
                      "nameLocation": "4298:3:82",
                      "nodeType": "VariableDeclaration",
                      "scope": 16759,
                      "src": "4290:11:82",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 16727,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4290:7:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 16730,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "nameLocation": "4311:12:82",
                      "nodeType": "VariableDeclaration",
                      "scope": 16759,
                      "src": "4303:20:82",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 16729,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4303:7:82",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16739,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 16732,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16703,
                        "src": "4341:6:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 16733,
                        "name": "fromDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16705,
                        "src": "4349:12:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 16734,
                        "name": "destinationDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16707,
                        "src": "4363:19:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 16735,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16709,
                        "src": "4384:10:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 16736,
                        "name": "depositData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16711,
                        "src": "4396:11:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "id": 16737,
                        "name": "feeData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16713,
                        "src": "4409:7:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 16731,
                      "name": "_calculateFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16700,
                      "src": "4327:13:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint8_$_t_uint8_$_t_bytes32_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$returns$_t_uint256_$_t_address_$",
                        "typeString": "function (address,uint8,uint8,bytes32,bytes calldata,bytes calldata) view returns (uint256,address)"
                      }
                    },
                    "id": 16738,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4327:90:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_address_$",
                      "typeString": "tuple(uint256,address)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4289:128:82"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 16741,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16730,
                        "src": "4437:12:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 16742,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16703,
                        "src": "4451:6:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 16745,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967268,
                            "src": "4467:4:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PercentageERC20FeeHandler_$16906",
                              "typeString": "contract PercentageERC20FeeHandler"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_PercentageERC20FeeHandler_$16906",
                              "typeString": "contract PercentageERC20FeeHandler"
                            }
                          ],
                          "id": 16744,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4459:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 16743,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4459:7:82",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 16746,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4459:13:82",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 16747,
                        "name": "fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16728,
                        "src": "4474:3:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 16740,
                      "name": "lockERC20",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9041,
                      "src": "4427:9:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 16748,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4427:51:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16749,
                  "nodeType": "ExpressionStatement",
                  "src": "4427:51:82"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 16751,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16703,
                        "src": "4507:6:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 16752,
                        "name": "fromDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16705,
                        "src": "4515:12:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 16753,
                        "name": "destinationDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16707,
                        "src": "4529:19:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 16754,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16709,
                        "src": "4550:10:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 16755,
                        "name": "fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16728,
                        "src": "4562:3:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 16756,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16730,
                        "src": "4567:12:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 16750,
                      "name": "FeeCollected",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18213,
                      "src": "4494:12:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint8_$_t_uint8_$_t_bytes32_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (address,uint8,uint8,bytes32,uint256,address)"
                      }
                    },
                    "id": 16757,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4494:86:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16758,
                  "nodeType": "EmitStatement",
                  "src": "4489:91:82"
                }
              ]
            },
            "documentation": {
              "id": 16701,
              "nodeType": "StructuredDocumentation",
              "src": "3581:429:82",
              "text": "@notice Collects fee for deposit.\n@param sender Sender of the deposit.\n@param fromDomainID ID of the source chain.\n@param destinationDomainID ID of chain deposit will be bridged to.\n@param resourceID ResourceID to be used when making deposits.\n@param depositData Additional data about the deposit.\n@param feeData Additional data to be passed to the fee handler."
            },
            "functionSelector": "25307065",
            "id": 16760,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 16717,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 16716,
                  "name": "onlyBridgeOrRouter",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 16241,
                  "src": "4196:18:82"
                },
                "nodeType": "ModifierInvocation",
                "src": "4196:18:82"
              }
            ],
            "name": "collectFee",
            "nameLocation": "4024:10:82",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 16715,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4187:8:82"
            },
            "parameters": {
              "id": 16714,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16703,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "4043:6:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16760,
                  "src": "4035:14:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16702,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4035:7:82",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16705,
                  "mutability": "mutable",
                  "name": "fromDomainID",
                  "nameLocation": "4057:12:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16760,
                  "src": "4051:18:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16704,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "4051:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16707,
                  "mutability": "mutable",
                  "name": "destinationDomainID",
                  "nameLocation": "4077:19:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16760,
                  "src": "4071:25:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16706,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "4071:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16709,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "4106:10:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16760,
                  "src": "4098:18:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 16708,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4098:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16711,
                  "mutability": "mutable",
                  "name": "depositData",
                  "nameLocation": "4133:11:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16760,
                  "src": "4118:26:82",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16710,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4118:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16713,
                  "mutability": "mutable",
                  "name": "feeData",
                  "nameLocation": "4161:7:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16760,
                  "src": "4146:22:82",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16712,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4146:5:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4034:135:82"
            },
            "returnParameters": {
              "id": 16718,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4215:0:82"
            },
            "scope": 16906,
            "src": "4015:572:82",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 16823,
              "nodeType": "Block",
              "src": "5067:579:82",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 16780,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          "id": 16775,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 16773,
                            "name": "newUpperBound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16767,
                            "src": "5085:13:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 16774,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5102:1:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5085:18:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              "id": 16778,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 16776,
                                "name": "newUpperBound",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16767,
                                "src": "5108:13:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "id": 16777,
                                "name": "newLowerBound",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16765,
                                "src": "5124:13:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "src": "5108:29:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 16779,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "5107:31:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5085:53:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "557070657220626f756e64206d757374206265206c6172676572207468616e206c6f77657220626f756e64206f722030",
                        "id": 16781,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5140:50:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_652f43be7e7702566082f3925a2196fcf8e8aaa543bd46c4af5c62ccb177eb74",
                          "typeString": "literal_string \"Upper bound must be larger than lower bound or 0\""
                        },
                        "value": "Upper bound must be larger than lower bound or 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_652f43be7e7702566082f3925a2196fcf8e8aaa543bd46c4af5c62ccb177eb74",
                          "typeString": "literal_string \"Upper bound must be larger than lower bound or 0\""
                        }
                      ],
                      "id": 16772,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5077:7:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16782,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5077:114:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16783,
                  "nodeType": "ExpressionStatement",
                  "src": "5077:114:82"
                },
                {
                  "assignments": [
                    16786
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16786,
                      "mutability": "mutable",
                      "name": "existingBounds",
                      "nameLocation": "5215:14:82",
                      "nodeType": "VariableDeclaration",
                      "scope": 16823,
                      "src": "5201:28:82",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                        "typeString": "struct PercentageERC20FeeHandler.Bounds"
                      },
                      "typeName": {
                        "id": 16785,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 16784,
                          "name": "Bounds",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 16537,
                          "src": "5201:6:82"
                        },
                        "referencedDeclaration": 16537,
                        "src": "5201:6:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Bounds_$16537_storage_ptr",
                          "typeString": "struct PercentageERC20FeeHandler.Bounds"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16790,
                  "initialValue": {
                    "baseExpression": {
                      "id": 16787,
                      "name": "_resourceIDToFeeBounds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16542,
                      "src": "5232:22:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Bounds_$16537_storage_$",
                        "typeString": "mapping(bytes32 => struct PercentageERC20FeeHandler.Bounds storage ref)"
                      }
                    },
                    "id": 16789,
                    "indexExpression": {
                      "id": 16788,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16763,
                      "src": "5255:10:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5232:34:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Bounds_$16537_storage",
                      "typeString": "struct PercentageERC20FeeHandler.Bounds storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5201:65:82"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 16800,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          "id": 16795,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 16792,
                              "name": "existingBounds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16786,
                              "src": "5284:14:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                                "typeString": "struct PercentageERC20FeeHandler.Bounds memory"
                              }
                            },
                            "id": 16793,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "lowerBound",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16534,
                            "src": "5284:25:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 16794,
                            "name": "newLowerBound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16765,
                            "src": "5313:13:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "5284:42:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          "id": 16799,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 16796,
                              "name": "existingBounds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16786,
                              "src": "5342:14:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                                "typeString": "struct PercentageERC20FeeHandler.Bounds memory"
                              }
                            },
                            "id": 16797,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "upperBound",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16536,
                            "src": "5342:25:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 16798,
                            "name": "newUpperBound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16767,
                            "src": "5371:13:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "5342:42:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5284:100:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "43757272656e7420626f756e64732061726520657175616c20746f206e657720626f756e6473",
                        "id": 16801,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5398:40:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_36b74e5f379e2a998a7d6182040f3657252741580e6591c18971ddc1cbd71b7e",
                          "typeString": "literal_string \"Current bounds are equal to new bounds\""
                        },
                        "value": "Current bounds are equal to new bounds"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_36b74e5f379e2a998a7d6182040f3657252741580e6591c18971ddc1cbd71b7e",
                          "typeString": "literal_string \"Current bounds are equal to new bounds\""
                        }
                      ],
                      "id": 16791,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5276:7:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16802,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5276:172:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16803,
                  "nodeType": "ExpressionStatement",
                  "src": "5276:172:82"
                },
                {
                  "assignments": [
                    16806
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16806,
                      "mutability": "mutable",
                      "name": "newBounds",
                      "nameLocation": "5473:9:82",
                      "nodeType": "VariableDeclaration",
                      "scope": 16823,
                      "src": "5459:23:82",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                        "typeString": "struct PercentageERC20FeeHandler.Bounds"
                      },
                      "typeName": {
                        "id": 16805,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 16804,
                          "name": "Bounds",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 16537,
                          "src": "5459:6:82"
                        },
                        "referencedDeclaration": 16537,
                        "src": "5459:6:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Bounds_$16537_storage_ptr",
                          "typeString": "struct PercentageERC20FeeHandler.Bounds"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16811,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 16808,
                        "name": "newLowerBound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16765,
                        "src": "5492:13:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "id": 16809,
                        "name": "newUpperBound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16767,
                        "src": "5507:13:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "id": 16807,
                      "name": "Bounds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16537,
                      "src": "5485:6:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_Bounds_$16537_storage_ptr_$",
                        "typeString": "type(struct PercentageERC20FeeHandler.Bounds storage pointer)"
                      }
                    },
                    "id": 16810,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5485:36:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                      "typeString": "struct PercentageERC20FeeHandler.Bounds memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5459:62:82"
                },
                {
                  "expression": {
                    "id": 16816,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 16812,
                        "name": "_resourceIDToFeeBounds",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16542,
                        "src": "5531:22:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Bounds_$16537_storage_$",
                          "typeString": "mapping(bytes32 => struct PercentageERC20FeeHandler.Bounds storage ref)"
                        }
                      },
                      "id": 16814,
                      "indexExpression": {
                        "id": 16813,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16763,
                        "src": "5554:10:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5531:34:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Bounds_$16537_storage",
                        "typeString": "struct PercentageERC20FeeHandler.Bounds storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 16815,
                      "name": "newBounds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16806,
                      "src": "5568:9:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Bounds_$16537_memory_ptr",
                        "typeString": "struct PercentageERC20FeeHandler.Bounds memory"
                      }
                    },
                    "src": "5531:46:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Bounds_$16537_storage",
                      "typeString": "struct PercentageERC20FeeHandler.Bounds storage ref"
                    }
                  },
                  "id": 16817,
                  "nodeType": "ExpressionStatement",
                  "src": "5531:46:82"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 16819,
                        "name": "newLowerBound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16765,
                        "src": "5610:13:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "id": 16820,
                        "name": "newUpperBound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16767,
                        "src": "5625:13:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "id": 16818,
                      "name": "FeeBoundsChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16548,
                      "src": "5593:16:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 16821,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5593:46:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16822,
                  "nodeType": "EmitStatement",
                  "src": "5588:51:82"
                }
              ]
            },
            "documentation": {
              "id": 16761,
              "nodeType": "StructuredDocumentation",
              "src": "4593:359:82",
              "text": "@notice Sets new value for lower and upper fee bounds, both are in token amount.\n@notice Only callable by admin.\n@param resourceID ResourceID for which new fee bounds will be set.\n@param newLowerBound Value {_newLowerBound} will be updated to.\n@param newUpperBound Value {_newUpperBound} will be updated to."
            },
            "functionSelector": "d4e6bc96",
            "id": 16824,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 16770,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 16769,
                  "name": "onlyAdmin",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 16234,
                  "src": "5057:9:82"
                },
                "nodeType": "ModifierInvocation",
                "src": "5057:9:82"
              }
            ],
            "name": "changeFeeBounds",
            "nameLocation": "4966:15:82",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16768,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16763,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "4990:10:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16824,
                  "src": "4982:18:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 16762,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4982:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16765,
                  "mutability": "mutable",
                  "name": "newLowerBound",
                  "nameLocation": "5010:13:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16824,
                  "src": "5002:21:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 16764,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "5002:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16767,
                  "mutability": "mutable",
                  "name": "newUpperBound",
                  "nameLocation": "5033:13:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16824,
                  "src": "5025:21:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 16766,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "5025:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4981:66:82"
            },
            "returnParameters": {
              "id": 16771,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5067:0:82"
            },
            "scope": 16906,
            "src": "4957:689:82",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 16904,
              "nodeType": "Block",
              "src": "6213:523:82",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 16843,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 16839,
                            "name": "addrs",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16830,
                            "src": "6231:5:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 16840,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "6231:12:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 16841,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16833,
                            "src": "6247:7:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 16842,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "6247:14:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6231:30:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "61646472735b5d2c20616d6f756e74735b5d3a2064696666206c656e677468",
                        "id": 16844,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6263:33:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6294e89c3434efe3f2b9f4527205255a0d63a93ae07514ac7ac8f6435286aa9b",
                          "typeString": "literal_string \"addrs[], amounts[]: diff length\""
                        },
                        "value": "addrs[], amounts[]: diff length"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6294e89c3434efe3f2b9f4527205255a0d63a93ae07514ac7ac8f6435286aa9b",
                          "typeString": "literal_string \"addrs[], amounts[]: diff length\""
                        }
                      ],
                      "id": 16838,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "6223:7:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6223:74:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16846,
                  "nodeType": "ExpressionStatement",
                  "src": "6223:74:82"
                },
                {
                  "assignments": [
                    16848
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16848,
                      "mutability": "mutable",
                      "name": "tokenHandler",
                      "nameLocation": "6315:12:82",
                      "nodeType": "VariableDeclaration",
                      "scope": 16904,
                      "src": "6307:20:82",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 16847,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6307:7:82",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16855,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 16853,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16827,
                        "src": "6382:10:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 16850,
                            "name": "_bridgeAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16205,
                            "src": "6338:14:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 16849,
                          "name": "IBridge",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18146,
                          "src": "6330:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBridge_$18146_$",
                            "typeString": "type(contract IBridge)"
                          }
                        },
                        "id": 16851,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6330:23:82",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBridge_$18146",
                          "typeString": "contract IBridge"
                        }
                      },
                      "id": 16852,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_resourceIDToHandlerAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18129,
                      "src": "6330:51:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 16854,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6330:63:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6307:86:82"
                },
                {
                  "assignments": [
                    16857
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16857,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "nameLocation": "6411:12:82",
                      "nodeType": "VariableDeclaration",
                      "scope": 16904,
                      "src": "6403:20:82",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 16856,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6403:7:82",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16864,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 16862,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16827,
                        "src": "6486:10:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 16859,
                            "name": "tokenHandler",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16848,
                            "src": "6438:12:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 16858,
                          "name": "IERCHandler",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18195,
                          "src": "6426:11:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERCHandler_$18195_$",
                            "typeString": "type(contract IERCHandler)"
                          }
                        },
                        "id": 16860,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6426:25:82",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERCHandler_$18195",
                          "typeString": "contract IERCHandler"
                        }
                      },
                      "id": 16861,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_resourceIDToTokenContractAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18194,
                      "src": "6426:59:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 16863,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6426:71:82",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6403:94:82"
                },
                {
                  "body": {
                    "id": 16902,
                    "nodeType": "Block",
                    "src": "6550:180:82",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "baseExpression": {
                                "id": 16876,
                                "name": "addrs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16830,
                                "src": "6564:5:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 16878,
                              "indexExpression": {
                                "id": 16877,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16866,
                                "src": "6570:1:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6564:8:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 16879,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mustNotBeZero",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19136,
                            "src": "6564:22:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_address_$bound_to$_t_address_$",
                              "typeString": "function (address) pure returns (address)"
                            }
                          },
                          "id": 16880,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6564:24:82",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 16881,
                        "nodeType": "ExpressionStatement",
                        "src": "6564:24:82"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 16883,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16857,
                              "src": "6615:12:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 16884,
                                "name": "addrs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16830,
                                "src": "6629:5:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 16886,
                              "indexExpression": {
                                "id": 16885,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16866,
                                "src": "6635:1:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6629:8:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 16887,
                                "name": "amounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16833,
                                "src": "6639:7:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 16889,
                              "indexExpression": {
                                "id": 16888,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16866,
                                "src": "6647:1:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6639:10:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 16882,
                            "name": "releaseERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9065,
                            "src": "6602:12:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 16890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6602:48:82",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 16891,
                        "nodeType": "ExpressionStatement",
                        "src": "6602:48:82"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 16893,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16857,
                              "src": "6684:12:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 16894,
                                "name": "addrs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16830,
                                "src": "6698:5:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 16896,
                              "indexExpression": {
                                "id": 16895,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16866,
                                "src": "6704:1:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6698:8:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 16897,
                                "name": "amounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16833,
                                "src": "6708:7:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 16899,
                              "indexExpression": {
                                "id": 16898,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16866,
                                "src": "6716:1:82",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6708:10:82",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 16892,
                            "name": "FeeDistributed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18222,
                            "src": "6669:14:82",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 16900,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6669:50:82",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 16901,
                        "nodeType": "EmitStatement",
                        "src": "6664:55:82"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 16872,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 16869,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16866,
                      "src": "6527:1:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 16870,
                        "name": "addrs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16830,
                        "src": "6531:5:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 16871,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "6531:12:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6527:16:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 16903,
                  "initializationExpression": {
                    "assignments": [
                      16866
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 16866,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "6520:1:82",
                        "nodeType": "VariableDeclaration",
                        "scope": 16903,
                        "src": "6512:9:82",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 16865,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6512:7:82",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 16868,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 16867,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6524:1:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "6512:13:82"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 16874,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6545:3:82",
                      "subExpression": {
                        "id": 16873,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16866,
                        "src": "6545:1:82",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 16875,
                    "nodeType": "ExpressionStatement",
                    "src": "6545:3:82"
                  },
                  "nodeType": "ForStatement",
                  "src": "6507:223:82"
                }
              ]
            },
            "documentation": {
              "id": 16825,
              "nodeType": "StructuredDocumentation",
              "src": "5656:436:82",
              "text": "@notice Transfers tokens from the contract to the specified addresses. The parameters addrs and amounts are mapped 1-1.\nThis means that the address at index 0 for addrs will receive the amount of tokens from amounts at index 0.\n@param resourceID ResourceID of the token.\n@param addrs Array of addresses to transfer {amounts} to.\n@param amounts Array of amounts to transfer to {addrs}."
            },
            "functionSelector": "d48f9534",
            "id": 16905,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 16836,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 16835,
                  "name": "onlyAdmin",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 16234,
                  "src": "6203:9:82"
                },
                "nodeType": "ModifierInvocation",
                "src": "6203:9:82"
              }
            ],
            "name": "transferERC20Fee",
            "nameLocation": "6106:16:82",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16834,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16827,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "6131:10:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16905,
                  "src": "6123:18:82",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 16826,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6123:7:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16830,
                  "mutability": "mutable",
                  "name": "addrs",
                  "nameLocation": "6162:5:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16905,
                  "src": "6143:24:82",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 16828,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "6143:7:82",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 16829,
                    "nodeType": "ArrayTypeName",
                    "src": "6143:9:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16833,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nameLocation": "6185:7:82",
                  "nodeType": "VariableDeclaration",
                  "scope": 16905,
                  "src": "6169:23:82",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 16831,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "6169:4:82",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 16832,
                    "nodeType": "ArrayTypeName",
                    "src": "6169:6:82",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6122:71:82"
            },
            "returnParameters": {
              "id": 16837,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6213:0:82"
            },
            "scope": 16906,
            "src": "6097:639:82",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 16907,
        "src": "457:6281:82",
        "usedErrors": [
          16221,
          19110
        ]
      }
    ],
    "src": "76:6663:82"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.11+commit.d7f03943.Emscripten.clang"
  },
  "networks": {
    "1727170272871": {
      "events": {},
      "links": {},
      "address": "0x30d704A60037DfE54e7e4D242Ea0cBC6125aE497",
      "transactionHash": "0x8e8ff9f2f033082d92fbc8b4302ac485b84a01c9e543ccd3cb1b00bac9712f18"
    },
    "1727170313921": {
      "events": {},
      "links": {},
      "address": "0x30d704A60037DfE54e7e4D242Ea0cBC6125aE497",
      "transactionHash": "0x83c0d3348b137b646e2621e4cc831edb86ecc74bf33b5713b535d638d3a78f40"
    }
  },
  "schemaVersion": "3.4.6",
  "updatedAt": "2024-09-24T09:32:14.817Z",
  "networkType": "ethereum",
  "devdoc": {
    "author": "ChainSafe Systems.",
    "kind": "dev",
    "methods": {
      "calculateFee(address,uint8,uint8,bytes32,bytes,bytes)": {
        "params": {
          "depositData": "Additional data about the deposit.",
          "destinationDomainID": "ID of chain deposit will be bridged to.",
          "feeData": "Additional data to be passed to the fee handler.",
          "fromDomainID": "ID of the source chain.",
          "resourceID": "ResourceID to be used when making deposits.",
          "sender": "Sender of the deposit."
        },
        "returns": {
          "fee": "Returns the fee amount.",
          "tokenAddress": "Returns the address of the token to be used for fee."
        }
      },
      "changeFee(uint8,bytes32,uint256)": {
        "params": {
          "destinationDomainID": "ID of chain fee will be set.",
          "newFee": "Value to which fee will be updated to for the provided {destinationDomainID} and {resourceID}.",
          "resourceID": "ResourceID for which fee will be set."
        }
      },
      "changeFeeBounds(bytes32,uint128,uint128)": {
        "params": {
          "newLowerBound": "Value {_newLowerBound} will be updated to.",
          "newUpperBound": "Value {_newUpperBound} will be updated to.",
          "resourceID": "ResourceID for which new fee bounds will be set."
        }
      },
      "collectFee(address,uint8,uint8,bytes32,bytes,bytes)": {
        "params": {
          "depositData": "Additional data about the deposit.",
          "destinationDomainID": "ID of chain deposit will be bridged to.",
          "feeData": "Additional data to be passed to the fee handler.",
          "fromDomainID": "ID of the source chain.",
          "resourceID": "ResourceID to be used when making deposits.",
          "sender": "Sender of the deposit."
        }
      },
      "constructor": {
        "params": {
          "bridgeAddress": "Contract address of previously deployed Bridge.",
          "feeHandlerRouterAddress": "Contract address of previously deployed FeeHandlerRouter."
        }
      },
      "getRoleAdmin(bytes32)": {
        "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."
      },
      "getRoleMember(bytes32,uint256)": {
        "details": "Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information."
      },
      "getRoleMemberCount(bytes32)": {
        "details": "Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role."
      },
      "getRoleMemberIndex(bytes32,address)": {
        "details": "Returns the index of the account that have `role`."
      },
      "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`."
      },
      "renounceAdmin(address)": {
        "params": {
          "newAdmin": "Address that admin role will be granted to."
        }
      },
      "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 granted `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."
      },
      "transferERC20Fee(bytes32,address[],uint256[])": {
        "params": {
          "addrs": "Array of addresses to transfer {amounts} to.",
          "amounts": "Array of amounts to transfer to {addrs}.",
          "resourceID": "ResourceID of the token."
        }
      },
      "transferFee(address[],uint256[])": {
        "params": {
          "addrs": "Array of addresses to transfer {amounts} to.",
          "amounts": "Array of amounts to transfer to {addrs}."
        }
      }
    },
    "title": "Handles deposit fees.",
    "version": 1
  },
  "userdoc": {
    "events": {
      "FeeCollected(address,uint8,uint8,bytes32,uint256,address)": {
        "notice": "This event is emitted when the fee is collected."
      },
      "FeeDistributed(address,address,uint256)": {
        "notice": "This event is emitted when the fee is distributed to an address."
      }
    },
    "kind": "user",
    "methods": {
      "calculateFee(address,uint8,uint8,bytes32,bytes,bytes)": {
        "notice": "Calculates fee for deposit."
      },
      "changeFee(uint8,bytes32,uint256)": {
        "notice": "Maps the {newFee} to {destinationDomainID} to {resourceID} in {_domainResourceIDToFee}.Only callable by admin."
      },
      "changeFeeBounds(bytes32,uint128,uint128)": {
        "notice": "Sets new value for lower and upper fee bounds, both are in token amount.Only callable by admin."
      },
      "collectFee(address,uint8,uint8,bytes32,bytes,bytes)": {
        "notice": "Collects fee for deposit."
      },
      "feeHandlerType()": {
        "notice": "Getter function for fee handler type"
      },
      "renounceAdmin(address)": {
        "notice": "Removes admin role from {_msgSender()} and grants it to {newAdmin}.Only callable by an address that currently has the admin role."
      },
      "transferERC20Fee(bytes32,address[],uint256[])": {
        "notice": "Transfers tokens from the contract to the specified addresses. The parameters addrs and amounts are mapped 1-1. This means that the address at index 0 for addrs will receive the amount of tokens from amounts at index 0."
      },
      "transferFee(address[],uint256[])": {
        "notice": "Transfers eth in the contract to the specified addresses. The parameters addrs and amounts are mapped 1-1. This means that the address at index 0 for addrs will receive the amount (in WEI) from amounts at index 0."
      }
    },
    "notice": "This contract is intended to be used with the Bridge contract.",
    "version": 1
  }
}