{
  "contractName": "BasicFeeHandler",
  "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": "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": "_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": "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": "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": [],
      "name": "feeHandlerType",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "renounceAdmin",
      "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",
      "payable": 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": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "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": "address payable[]",
          "name": "addrs",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "name": "transferFee",
      "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\":\"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\":\"_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\":\"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\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"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\":\"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\":\"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 to be passed to specified handler.\",\"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\":{\"_0\":\"Returns the fee amount.\"}},\"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.\"}},\"collectFee(address,uint8,uint8,bytes32,bytes,bytes)\":{\"params\":{\"depositData\":\"Additional data to be passed to specified handler.\",\"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.\"},\"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.\"},\"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.\"},\"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/BasicFeeHandler.sol\":\"BasicFeeHandler\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@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/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9772845c886f87a3aab315f8d6b68aa599027c20f441b131cd4afaf65b588900\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad2f29a9c17a4f746416c9e254e17671f43c409dbfa6e4d7d76c3e4a83212d31\",\"dweb:/ipfs/QmTqU65L6iu6yqmXKzcNLPioR8etzKPWycpDJCm17ifVdS\"]},\"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/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": "0x60c06040523480156200001157600080fd5b50604051620013d6380380620013d6833981016040819052620000349162000162565b6001600160a01b03808316608052811660a052620000546000336200005c565b50506200019a565b6200006882826200006c565b5050565b6000828152602081815260409091206200009191839062000ae0620000d3821b17901c565b15620000685760405133906001600160a01b0383169084907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d90600090a45050565b6000620000ea836001600160a01b038416620000f3565b90505b92915050565b60008181526001830160205260408120546200013c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620000ed565b506000620000ed565b80516001600160a01b03811681146200015d57600080fd5b919050565b600080604083850312156200017657600080fd5b620001818362000145565b9150620001916020840162000145565b90509250929050565b60805160a051611208620001ce600039600081816102b00152610b320152600081816101980152610b0001526112086000f3fe6080604052600436106101095760003560e01c8063745e6b6111610095578063a217fddf11610064578063a217fddf14610342578063abc9db0b14610357578063ca15c87314610377578063d547741f14610397578063ef4f081f146103b757600080fd5b8063745e6b611461029e5780639010d07c146102d2578063904e9b2b146102f257806391d148541461031257600080fd5b806336568abe116100dc57806336568abe146101d25780634e0df3f6146101f2578063542774b5146102125780635e1fab0f14610246578063632d589c1461026657600080fd5b8063248a9ca31461010e57806325307065146101515780632f2ff15d14610166578063318c136e14610186575b600080fd5b34801561011a57600080fd5b5061013e610129366004610e4f565b60009081526020819052604090206002015490565b6040519081526020015b60405180910390f35b61016461015f366004610edf565b61041b565b005b34801561017257600080fd5b50610164610181366004610f8c565b6104d4565b34801561019257600080fd5b506101ba7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610148565b3480156101de57600080fd5b506101646101ed366004610f8c565b610562565b3480156101fe57600080fd5b5061013e61020d366004610f8c565b6105dc565b34801561021e57600080fd5b506040805180820182526005815264626173696360d81b602082015290516101489190610fbc565b34801561025257600080fd5b50610164610261366004611011565b610607565b34801561027257600080fd5b5061013e61028136600461102e565b600160209081526000928352604080842090915290825290205481565b3480156102aa57600080fd5b506101ba7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102de57600080fd5b506101ba6102ed366004611058565b610677565b3480156102fe57600080fd5b5061016461030d3660046110bf565b610696565b34801561031e57600080fd5b5061033261032d366004610f8c565b610914565b6040519015158152602001610148565b34801561034e57600080fd5b5061013e600081565b34801561036357600080fd5b5061016461037236600461112b565b61092c565b34801561038357600080fd5b5061013e610392366004610e4f565b610a48565b3480156103a357600080fd5b506101646103b2366004610f8c565b610a5f565b3480156103c357600080fd5b506103fe6103d2366004610edf565b60ff86166000908152600160209081526040808320888452909152812054909850989650505050505050565b604080519283526001600160a01b03909116602083015201610148565b610423610af5565b60ff8616600090815260016020908152604080832088845290915290205434811461046857604051634dc2c71160e01b81523460048201526024015b60405180910390fd5b604080516001600160a01b038b16815260ff8a811660208301528916818301526060810188905260808101839052600060a082015290517fbd231b7fa4103e15e7a238c72f07e8aff310701af121895aa6c793b80245e4339181900360c00190a1505050505050505050565b6000828152602081905260409020600201546104f09033610914565b6105545760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b606482015260840161045f565b61055e8282610bb7565b5050565b6001600160a01b03811633146105d25760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161045f565b61055e8282610c10565b6000828152602081815260408083206001600160a01b03851684526001019091529020545b92915050565b336001600160a01b0382168114156106615760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f742072656e6f756e6365206f6e6573656c66000000000000000000604482015260640161045f565b61066c6000836104d4565b61055e600082610562565b600082815260208190526040812061068f9083610c69565b9392505050565b6106a1600033610914565b6106ed5760405162461bcd60e51b815260206004820152601e60248201527f73656e64657220646f65736e277420686176652061646d696e20726f6c650000604482015260640161045f565b82811461073c5760405162461bcd60e51b815260206004820152601f60248201527f61646472735b5d2c20616d6f756e74735b5d3a2064696666206c656e67746800604482015260640161045f565b60005b8381101561090d5761077f85858381811061075c5761075c61115e565b90506020020160208101906107719190611011565b6001600160a01b0316610c75565b5060008585838181106107945761079461115e565b90506020020160208101906107a99190611011565b6001600160a01b03168484848181106107c4576107c461115e565b9050602002013560405160006040518083038185875af1925050503d806000811461080b576040519150601f19603f3d011682016040523d82523d6000602084013e610810565b606091505b50509050806108615760405162461bcd60e51b815260206004820152601960248201527f466565206574686572207472616e73666572206661696c656400000000000000604482015260640161045f565b7faaa40a232aaf133fdd28f3485f6fdd163514cfadbffa981f3610f42398efe34b60008787858181106108965761089661115e565b90506020020160208101906108ab9190611011565b8686868181106108bd576108bd61115e565b905060200201356040516108f2939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405180910390a150806109058161118a565b91505061073f565b5050505050565b600082815260208190526040812061068f9083610ca2565b610937600033610914565b6109835760405162461bcd60e51b815260206004820152601e60248201527f73656e64657220646f65736e277420686176652061646d696e20726f6c650000604482015260640161045f565b60ff83166000908152600160209081526040808320858452909152902054818114156109f15760405162461bcd60e51b815260206004820152601f60248201527f43757272656e742066656520697320657175616c20746f206e65772066656500604482015260640161045f565b60ff8416600090815260016020908152604080832086845282529182902084905590518381527f6bbc57480a46553fa4d156ce702beef5f3ad66303b0ed1a5d4cb44966c6584c3910160405180910390a150505050565b600081815260208190526040812061060190610cc4565b600082815260208190526040902060020154610a7b9033610914565b6105d25760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b606482015260840161045f565b600061068f836001600160a01b038416610cce565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610b545750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b610bb55760405162461bcd60e51b815260206004820152602c60248201527f73656e646572206d75737420626520627269646765206f722066656520726f7560448201526b1d195c8818dbdb9d1c9858dd60a21b606482015260840161045f565b565b6000828152602081905260409020610bcf9082610ae0565b1561055e5760405133906001600160a01b0383169084907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d90600090a45050565b6000828152602081905260409020610c289082610d1d565b1561055e5760405133906001600160a01b0383169084907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b90600090a45050565b600061068f8383610d32565b60006001600160a01b038216610c9e5760405163d92e233d60e01b815260040160405180910390fd5b5090565b6001600160a01b0381166000908152600183016020526040812054151561068f565b6000610601825490565b6000818152600183016020526040812054610d1557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610601565b506000610601565b600061068f836001600160a01b038416610d5c565b6000826000018281548110610d4957610d4961115e565b9060005260206000200154905092915050565b60008181526001830160205260408120548015610e45576000610d806001836111a5565b8554909150600090610d94906001906111a5565b9050818114610df9576000866000018281548110610db457610db461115e565b9060005260206000200154905080876000018481548110610dd757610dd761115e565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610e0a57610e0a6111bc565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610601565b6000915050610601565b600060208284031215610e6157600080fd5b5035919050565b6001600160a01b0381168114610e7d57600080fd5b50565b803560ff81168114610e9157600080fd5b919050565b60008083601f840112610ea857600080fd5b50813567ffffffffffffffff811115610ec057600080fd5b602083019150836020828501011115610ed857600080fd5b9250929050565b60008060008060008060008060c0898b031215610efb57600080fd5b8835610f0681610e68565b9750610f1460208a01610e80565b9650610f2260408a01610e80565b955060608901359450608089013567ffffffffffffffff80821115610f4657600080fd5b610f528c838d01610e96565b909650945060a08b0135915080821115610f6b57600080fd5b50610f788b828c01610e96565b999c989b5096995094979396929594505050565b60008060408385031215610f9f57600080fd5b823591506020830135610fb181610e68565b809150509250929050565b600060208083528351808285015260005b81811015610fe957858101830151858201604001528201610fcd565b81811115610ffb576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561102357600080fd5b813561068f81610e68565b6000806040838503121561104157600080fd5b61104a83610e80565b946020939093013593505050565b6000806040838503121561106b57600080fd5b50508035926020909101359150565b60008083601f84011261108c57600080fd5b50813567ffffffffffffffff8111156110a457600080fd5b6020830191508360208260051b8501011115610ed857600080fd5b600080600080604085870312156110d557600080fd5b843567ffffffffffffffff808211156110ed57600080fd5b6110f98883890161107a565b9096509450602087013591508082111561111257600080fd5b5061111f8782880161107a565b95989497509550505050565b60008060006060848603121561114057600080fd5b61114984610e80565b95602085013595506040909401359392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561119e5761119e611174565b5060010190565b6000828210156111b7576111b7611174565b500390565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220386a2872a2ab4b18eff98003c7155b29f562adbff6ecf48e2d0c999d956450e264736f6c634300080b0033",
  "deployedBytecode": "0x6080604052600436106101095760003560e01c8063745e6b6111610095578063a217fddf11610064578063a217fddf14610342578063abc9db0b14610357578063ca15c87314610377578063d547741f14610397578063ef4f081f146103b757600080fd5b8063745e6b611461029e5780639010d07c146102d2578063904e9b2b146102f257806391d148541461031257600080fd5b806336568abe116100dc57806336568abe146101d25780634e0df3f6146101f2578063542774b5146102125780635e1fab0f14610246578063632d589c1461026657600080fd5b8063248a9ca31461010e57806325307065146101515780632f2ff15d14610166578063318c136e14610186575b600080fd5b34801561011a57600080fd5b5061013e610129366004610e4f565b60009081526020819052604090206002015490565b6040519081526020015b60405180910390f35b61016461015f366004610edf565b61041b565b005b34801561017257600080fd5b50610164610181366004610f8c565b6104d4565b34801561019257600080fd5b506101ba7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610148565b3480156101de57600080fd5b506101646101ed366004610f8c565b610562565b3480156101fe57600080fd5b5061013e61020d366004610f8c565b6105dc565b34801561021e57600080fd5b506040805180820182526005815264626173696360d81b602082015290516101489190610fbc565b34801561025257600080fd5b50610164610261366004611011565b610607565b34801561027257600080fd5b5061013e61028136600461102e565b600160209081526000928352604080842090915290825290205481565b3480156102aa57600080fd5b506101ba7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102de57600080fd5b506101ba6102ed366004611058565b610677565b3480156102fe57600080fd5b5061016461030d3660046110bf565b610696565b34801561031e57600080fd5b5061033261032d366004610f8c565b610914565b6040519015158152602001610148565b34801561034e57600080fd5b5061013e600081565b34801561036357600080fd5b5061016461037236600461112b565b61092c565b34801561038357600080fd5b5061013e610392366004610e4f565b610a48565b3480156103a357600080fd5b506101646103b2366004610f8c565b610a5f565b3480156103c357600080fd5b506103fe6103d2366004610edf565b60ff86166000908152600160209081526040808320888452909152812054909850989650505050505050565b604080519283526001600160a01b03909116602083015201610148565b610423610af5565b60ff8616600090815260016020908152604080832088845290915290205434811461046857604051634dc2c71160e01b81523460048201526024015b60405180910390fd5b604080516001600160a01b038b16815260ff8a811660208301528916818301526060810188905260808101839052600060a082015290517fbd231b7fa4103e15e7a238c72f07e8aff310701af121895aa6c793b80245e4339181900360c00190a1505050505050505050565b6000828152602081905260409020600201546104f09033610914565b6105545760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b606482015260840161045f565b61055e8282610bb7565b5050565b6001600160a01b03811633146105d25760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161045f565b61055e8282610c10565b6000828152602081815260408083206001600160a01b03851684526001019091529020545b92915050565b336001600160a01b0382168114156106615760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f742072656e6f756e6365206f6e6573656c66000000000000000000604482015260640161045f565b61066c6000836104d4565b61055e600082610562565b600082815260208190526040812061068f9083610c69565b9392505050565b6106a1600033610914565b6106ed5760405162461bcd60e51b815260206004820152601e60248201527f73656e64657220646f65736e277420686176652061646d696e20726f6c650000604482015260640161045f565b82811461073c5760405162461bcd60e51b815260206004820152601f60248201527f61646472735b5d2c20616d6f756e74735b5d3a2064696666206c656e67746800604482015260640161045f565b60005b8381101561090d5761077f85858381811061075c5761075c61115e565b90506020020160208101906107719190611011565b6001600160a01b0316610c75565b5060008585838181106107945761079461115e565b90506020020160208101906107a99190611011565b6001600160a01b03168484848181106107c4576107c461115e565b9050602002013560405160006040518083038185875af1925050503d806000811461080b576040519150601f19603f3d011682016040523d82523d6000602084013e610810565b606091505b50509050806108615760405162461bcd60e51b815260206004820152601960248201527f466565206574686572207472616e73666572206661696c656400000000000000604482015260640161045f565b7faaa40a232aaf133fdd28f3485f6fdd163514cfadbffa981f3610f42398efe34b60008787858181106108965761089661115e565b90506020020160208101906108ab9190611011565b8686868181106108bd576108bd61115e565b905060200201356040516108f2939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405180910390a150806109058161118a565b91505061073f565b5050505050565b600082815260208190526040812061068f9083610ca2565b610937600033610914565b6109835760405162461bcd60e51b815260206004820152601e60248201527f73656e64657220646f65736e277420686176652061646d696e20726f6c650000604482015260640161045f565b60ff83166000908152600160209081526040808320858452909152902054818114156109f15760405162461bcd60e51b815260206004820152601f60248201527f43757272656e742066656520697320657175616c20746f206e65772066656500604482015260640161045f565b60ff8416600090815260016020908152604080832086845282529182902084905590518381527f6bbc57480a46553fa4d156ce702beef5f3ad66303b0ed1a5d4cb44966c6584c3910160405180910390a150505050565b600081815260208190526040812061060190610cc4565b600082815260208190526040902060020154610a7b9033610914565b6105d25760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b606482015260840161045f565b600061068f836001600160a01b038416610cce565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610b545750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b610bb55760405162461bcd60e51b815260206004820152602c60248201527f73656e646572206d75737420626520627269646765206f722066656520726f7560448201526b1d195c8818dbdb9d1c9858dd60a21b606482015260840161045f565b565b6000828152602081905260409020610bcf9082610ae0565b1561055e5760405133906001600160a01b0383169084907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d90600090a45050565b6000828152602081905260409020610c289082610d1d565b1561055e5760405133906001600160a01b0383169084907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b90600090a45050565b600061068f8383610d32565b60006001600160a01b038216610c9e5760405163d92e233d60e01b815260040160405180910390fd5b5090565b6001600160a01b0381166000908152600183016020526040812054151561068f565b6000610601825490565b6000818152600183016020526040812054610d1557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610601565b506000610601565b600061068f836001600160a01b038416610d5c565b6000826000018281548110610d4957610d4961115e565b9060005260206000200154905092915050565b60008181526001830160205260408120548015610e45576000610d806001836111a5565b8554909150600090610d94906001906111a5565b9050818114610df9576000866000018281548110610db457610db461115e565b9060005260206000200154905080876000018481548110610dd757610dd761115e565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610e0a57610e0a6111bc565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610601565b6000915050610601565b600060208284031215610e6157600080fd5b5035919050565b6001600160a01b0381168114610e7d57600080fd5b50565b803560ff81168114610e9157600080fd5b919050565b60008083601f840112610ea857600080fd5b50813567ffffffffffffffff811115610ec057600080fd5b602083019150836020828501011115610ed857600080fd5b9250929050565b60008060008060008060008060c0898b031215610efb57600080fd5b8835610f0681610e68565b9750610f1460208a01610e80565b9650610f2260408a01610e80565b955060608901359450608089013567ffffffffffffffff80821115610f4657600080fd5b610f528c838d01610e96565b909650945060a08b0135915080821115610f6b57600080fd5b50610f788b828c01610e96565b999c989b5096995094979396929594505050565b60008060408385031215610f9f57600080fd5b823591506020830135610fb181610e68565b809150509250929050565b600060208083528351808285015260005b81811015610fe957858101830151858201604001528201610fcd565b81811115610ffb576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561102357600080fd5b813561068f81610e68565b6000806040838503121561104157600080fd5b61104a83610e80565b946020939093013593505050565b6000806040838503121561106b57600080fd5b50508035926020909101359150565b60008083601f84011261108c57600080fd5b50813567ffffffffffffffff8111156110a457600080fd5b6020830191508360208260051b8501011115610ed857600080fd5b600080600080604085870312156110d557600080fd5b843567ffffffffffffffff808211156110ed57600080fd5b6110f98883890161107a565b9096509450602087013591508082111561111257600080fd5b5061111f8782880161107a565b95989497509550505050565b60008060006060848603121561114057600080fd5b61114984610e80565b95602085013595506040909401359392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561119e5761119e611174565b5060010190565b6000828210156111b7576111b7611174565b500390565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220386a2872a2ab4b18eff98003c7155b29f562adbff6ecf48e2d0c999d956450e264736f6c634300080b0033",
  "immutableReferences": {
    "16205": [
      {
        "length": 32,
        "start": 408
      },
      {
        "length": 32,
        "start": 2816
      }
    ],
    "16207": [
      {
        "length": 32,
        "start": 688
      },
      {
        "length": 32,
        "start": 2866
      }
    ]
  },
  "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:11724: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": "2929:476:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2939:12:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "2949:2:105",
                    "type": "",
                    "value": "32"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "2943:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2967:9:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "2978:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2960:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2960:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2960:21:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2990:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "3010:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "3004:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3004:13:105"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "2994:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3037:9:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "3048:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3033:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3033:18:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "3053:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3026:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3026:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3026:34:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3069:10:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "3078:1:105",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "3073:1:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3138:90:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "headStart",
                                      "nodeType": "YulIdentifier",
                                      "src": "3167:9:105"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "3178:1:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "3163:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "3163:17:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3182:2:105",
                                  "type": "",
                                  "value": "64"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3159:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3159:26:105"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "3201:6:105"
                                        },
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "3209:1:105"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "3197:3:105"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3197:14:105"
                                    },
                                    {
                                      "name": "_1",
                                      "nodeType": "YulIdentifier",
                                      "src": "3213:2:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "3193:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "3193:23:105"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "3187:5:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3187:30:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3152:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3152:66:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3152:66:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "3099:1:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "3102:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "3096:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3096:13:105"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "3110:19:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "3112:15:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "3121:1:105"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "3124:2:105"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "3117:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3117:10:105"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "3112:1:105"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "3092:3:105",
                    "statements": []
                  },
                  "src": "3088:140:105"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3262:66:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "headStart",
                                      "nodeType": "YulIdentifier",
                                      "src": "3291:9:105"
                                    },
                                    {
                                      "name": "length",
                                      "nodeType": "YulIdentifier",
                                      "src": "3302:6:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "3287:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "3287:22:105"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3311:2:105",
                                  "type": "",
                                  "value": "64"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3283:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3283:31:105"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3316:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3276:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3276:42:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3276:42:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "3243:1:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "3246:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "3240:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3240:13:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3237:91:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3337:62:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3353:9:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "3372:6:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3380:2:105",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "3368:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3368:15:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "3389:2:105",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "3385:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3385:7:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "3364:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3364:29:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3349:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3349:45:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3396:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3345:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3345:54:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3337: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": "2898:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2909:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2920:4:105",
                "type": ""
              }
            ],
            "src": "2808:597:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3480:177:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3526:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3535:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3538:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3528:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3528:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3528:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3501:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3510:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3497:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3497:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3522:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3493:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3493:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3490:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3551:36:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3577:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3564:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3564:23:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "3555:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3621:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "3596:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3596:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3596:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3636:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "3646:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3636:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3446:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3457:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3469:6:105",
                "type": ""
              }
            ],
            "src": "3410:247:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3747:165:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3793:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3802:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3805:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3795:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3795:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3795:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3768:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3777:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3764:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3764:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3789:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3760:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3760:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3757:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3818:37:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3845:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint8",
                      "nodeType": "YulIdentifier",
                      "src": "3828:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3828:27:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3818:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3864:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3891:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3902:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3887:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3887:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3874:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3874:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "3864:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint8t_bytes32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3705:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3716:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3728:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3736:6:105",
                "type": ""
              }
            ],
            "src": "3662:250:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4004:161:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4050:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4059:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4062:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4052:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4052:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4052:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4025:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4034:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4021:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4021:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4046:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "4017:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4017:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4014:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4075:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4098:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4085:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4085:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "4075:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4117:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4144:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4155:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4140:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4140:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4127:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4127:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "4117:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3962:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3973:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3985:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3993:6:105",
                "type": ""
              }
            ],
            "src": "3917:248:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4262:283:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4311:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4320:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4323:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4313:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4313:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4313:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "4290:6:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "4298:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4286:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4286:17:105"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "4305:3:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "4282:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4282:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "4275:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4275:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4272:55:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4336:30:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "4359:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4346:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4346:20:105"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "4336:6:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4409:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4418:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4421:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4411:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4411:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4411:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "4381:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4389:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "4378:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4378:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4375:50:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4434:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "4450:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4458:4:105",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4446:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4446:17:105"
                  },
                  "variableNames": [
                    {
                      "name": "arrayPos",
                      "nodeType": "YulIdentifier",
                      "src": "4434:8:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4523:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4532:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4535:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4525:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4525:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4525:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "4486:6:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4498:1:105",
                                    "type": "",
                                    "value": "5"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4501:6:105"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "4494:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4494:14:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "4482:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4482:27:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4511:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4478:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4478:38:105"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "4518:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "4475:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4475:47:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4472:67:105"
                }
              ]
            },
            "name": "abi_decode_array_address_payable_dyn_calldata",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "4225:6:105",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "4233:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "arrayPos",
                "nodeType": "YulTypedName",
                "src": "4241:8:105",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "4251:6:105",
                "type": ""
              }
            ],
            "src": "4170:375:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4715:632:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4761:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4770:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4773:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4763:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4763:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4763:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4736:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4745:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4732:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4732:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4757:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "4728:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4728:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4725:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4786:37:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4813:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4800:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4800:23:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "4790:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4832:28:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "4842:18:105",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "4836:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4887:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4896:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4899:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4889:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4889:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4889:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "4875:6:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "4883:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "4872:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4872:14:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4869:34:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4912:104:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4988:9:105"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "4999:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4984:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4984:22:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "5008:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_address_payable_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "4938:45:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4938:78:105"
                  },
                  "variables": [
                    {
                      "name": "value0_1",
                      "nodeType": "YulTypedName",
                      "src": "4916:8:105",
                      "type": ""
                    },
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "4926:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5025:18:105",
                  "value": {
                    "name": "value0_1",
                    "nodeType": "YulIdentifier",
                    "src": "5035:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "5025:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5052:18:105",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "5062:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "5052:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5079:48:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5112:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5123:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5108:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5108:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5095:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5095:32:105"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "5083:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5156:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5165:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5168:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5158:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5158:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5158:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "5142:8:105"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "5152:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "5139:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5139:16:105"
                  },
                  "nodeType": "YulIf",
                  "src": "5136:36:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5181:106:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5257:9:105"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "5268:8:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5253:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5253:24:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "5279:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_address_payable_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "5207:45:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5207:80:105"
                  },
                  "variables": [
                    {
                      "name": "value2_1",
                      "nodeType": "YulTypedName",
                      "src": "5185:8:105",
                      "type": ""
                    },
                    {
                      "name": "value3_1",
                      "nodeType": "YulTypedName",
                      "src": "5195:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5296:18:105",
                  "value": {
                    "name": "value2_1",
                    "nodeType": "YulIdentifier",
                    "src": "5306:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "5296:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5323:18:105",
                  "value": {
                    "name": "value3_1",
                    "nodeType": "YulIdentifier",
                    "src": "5333:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "5323: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": "4657:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "4668:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4680:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "4688:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "4696:6:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "4704:6:105",
                "type": ""
              }
            ],
            "src": "4550:797:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5447:92:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "5457:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5469:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5480:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5465:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5465:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "5457:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5499:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "5524:6:105"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "5517:6:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5517:14:105"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "5510:6:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5510:22:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5492:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5492:41:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5492:41:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5416:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5427:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "5438:4:105",
                "type": ""
              }
            ],
            "src": "5352:187:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5646:216:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5692:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5701:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5704:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5694:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5694:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5694:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5667:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5676:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5663:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5663:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5688:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5659:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5659:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "5656:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5717:37:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5744:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_uint8",
                      "nodeType": "YulIdentifier",
                      "src": "5727:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5727:27:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "5717:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5763:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5790:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5801:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5786:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5786:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5773:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5773:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "5763:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5814:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5841:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5852:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5837:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5837:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5824:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5824:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "5814:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint8t_bytes32t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5596:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5607:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5619:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "5627:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "5635:6:105",
                "type": ""
              }
            ],
            "src": "5544:318:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5996:145:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "6006:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6018:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6029:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6014:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6014:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "6006:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6048:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "6059:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6041:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6041:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6041:25:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6086:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6097:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6082:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6082:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "6106:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6122:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6127:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "6118:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6118:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6131:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "6114:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6114:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "6102:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6102:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6075:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6075:60:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6075: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": "5957:9:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "5968:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5976:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "5987:4:105",
                "type": ""
              }
            ],
            "src": "5867:274:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6379:372:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "6389:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6401:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6412:3:105",
                        "type": "",
                        "value": "192"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6397:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6397:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "6389:4:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6425:29:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6443:3:105",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6448:1:105",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "6439:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6439:11:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6452:1:105",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "6435:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6435:19:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "6429:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6470:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "6485:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "6493:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "6481:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6481:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6463:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6463:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6463:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6517:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6528:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6513:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6513:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "6537:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6545:4:105",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "6533:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6533:17:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6506:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6506:45:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6506:45:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6571:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6582:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6567:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6567:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "6591:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6599:4:105",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "6587:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6587:17:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6560:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6560:45:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6560:45:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6625:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6636:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6621:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6621:18:105"
                      },
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "6641:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6614:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6614:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6614:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6668:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6679:3:105",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6664:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6664:19:105"
                      },
                      {
                        "name": "value4",
                        "nodeType": "YulIdentifier",
                        "src": "6685:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6657:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6657:35:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6657:35:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6712:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6723:3:105",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6708:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6708:19:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value5",
                            "nodeType": "YulIdentifier",
                            "src": "6733:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "6741:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "6729:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6729:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6701:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6701:44:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6701: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": "6308:9:105",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "6319:6:105",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "6327:6:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "6335:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "6343:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "6351:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6359:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "6370:4:105",
                "type": ""
              }
            ],
            "src": "6146:605:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6930:237:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6947:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6958:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6940:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6940:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6940:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6981:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6992:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6977:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6977:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6997:2:105",
                        "type": "",
                        "value": "47"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6970:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6970:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6970:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7020:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7031:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7016:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7016:18:105"
                      },
                      {
                        "hexValue": "416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7036:34:105",
                        "type": "",
                        "value": "AccessControl: sender must be an"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7009:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7009:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7009:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7091:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7102:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7087:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7087:18:105"
                      },
                      {
                        "hexValue": "2061646d696e20746f206772616e74",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7107:17:105",
                        "type": "",
                        "value": " admin to grant"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7080:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7080:45:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7080:45:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7134:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7146:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7157:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7142:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7142:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7134:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0ba7116025f1ef6b158a2bd2238e617f30e17c9e456917d901086ca4f8ad2811__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6907:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "6921:4:105",
                "type": ""
              }
            ],
            "src": "6756:411:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7346:237:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7363:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7374:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7356:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7356:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7356:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7397:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7408:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7393:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7393:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7413:2:105",
                        "type": "",
                        "value": "47"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7386:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7386:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7386:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7436:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7447:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7432:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7432:18:105"
                      },
                      {
                        "hexValue": "416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e6365",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7452:34:105",
                        "type": "",
                        "value": "AccessControl: can only renounce"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7425:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7425:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7425:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7507:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7518:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7503:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7503:18:105"
                      },
                      {
                        "hexValue": "20726f6c657320666f722073656c66",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7523:17:105",
                        "type": "",
                        "value": " roles for self"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7496:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7496:45:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7496:45:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7550:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7562:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7573:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7558:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7558:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7550:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7323:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7337:4:105",
                "type": ""
              }
            ],
            "src": "7172:411:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7762:173:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7779:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7790:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7772:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7772:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7772:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7813:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7824:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7809:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7809:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7829:2:105",
                        "type": "",
                        "value": "23"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7802:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7802:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7802:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7852:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7863:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7848:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7848:18:105"
                      },
                      {
                        "hexValue": "43616e6e6f742072656e6f756e6365206f6e6573656c66",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7868:25:105",
                        "type": "",
                        "value": "Cannot renounce oneself"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7841:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7841:53:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7841:53:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7903:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7915:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7926:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7911:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7911:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7903:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_ab1c5f98bafd089c448d0f437f7951a06dfd484be68434b4420ed4d39647c206__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7739:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7753:4:105",
                "type": ""
              }
            ],
            "src": "7588:347:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8114:180:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8131:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8142:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8124:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8124:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8124:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8165:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8176:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8161:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8161:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8181:2:105",
                        "type": "",
                        "value": "30"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8154:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8154:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8154:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8204:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8215:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8200:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8200:18:105"
                      },
                      {
                        "hexValue": "73656e64657220646f65736e277420686176652061646d696e20726f6c65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "8220:32:105",
                        "type": "",
                        "value": "sender doesn't have admin role"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8193:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8193:60:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8193:60:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8262:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8274:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8285:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8270:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8270:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "8262:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_cccb3b305edc7308d7027b1001041a46b235f7d3213d690bb469676069d9b205__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8091:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "8105:4:105",
                "type": ""
              }
            ],
            "src": "7940:354:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8473:181:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8490:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8501:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8483:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8483:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8483:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8524:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8535:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8520:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8520:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8540:2:105",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8513:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8513:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8513:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8563:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8574:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8559:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8559:18:105"
                      },
                      {
                        "hexValue": "61646472735b5d2c20616d6f756e74735b5d3a2064696666206c656e677468",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "8579:33:105",
                        "type": "",
                        "value": "addrs[], amounts[]: diff length"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8552:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8552:61:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8552:61:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8622:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8634:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8645:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8630:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8630:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "8622:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_6294e89c3434efe3f2b9f4527205255a0d63a93ae07514ac7ac8f6435286aa9b__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8450:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "8464:4:105",
                "type": ""
              }
            ],
            "src": "8299:355:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8691:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8708:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8715:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8720:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "8711:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8711:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8701:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8701:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8701:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8748:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8751:4:105",
                        "type": "",
                        "value": "0x32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8741:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8741:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8741:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8772:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8775:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "8765:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8765:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8765:15:105"
                }
              ]
            },
            "name": "panic_error_0x32",
            "nodeType": "YulFunctionDefinition",
            "src": "8659:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8869:177:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8915:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8924:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8927:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8917:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8917:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8917:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "8890:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8899:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "8886:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8886:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8911:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "8882:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8882:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "8879:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8940:36:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8966:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "8953:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8953:23:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "8944:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "9010:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "8985:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8985:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8985:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9025:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "9035:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "9025:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address_payable",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8835:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "8846:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "8858:6:105",
                "type": ""
              }
            ],
            "src": "8791:255:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9242:14:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "9244:10:105",
                  "value": {
                    "name": "pos",
                    "nodeType": "YulIdentifier",
                    "src": "9251:3:105"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "9244: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": "9226:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "9234:3:105",
                "type": ""
              }
            ],
            "src": "9051:205:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9435:175:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9452:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9463:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9445:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9445:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9445:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9486:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9497:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9482:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9482:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9502:2:105",
                        "type": "",
                        "value": "25"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9475:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9475:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9475:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9525:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9536:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9521:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9521:18:105"
                      },
                      {
                        "hexValue": "466565206574686572207472616e73666572206661696c6564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "9541:27:105",
                        "type": "",
                        "value": "Fee ether transfer failed"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9514:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9514:55:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9514:55:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9578:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9590:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9601:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "9586:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9586:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "9578:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_c83ea8d31d5b2432d5661a262a1c8abcb30052289f0faa441155730eeab43e0a__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9412:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "9426:4:105",
                "type": ""
              }
            ],
            "src": "9261:349:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9780:218:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "9790:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9802:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9813:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "9798:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9798:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "9790:4:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9825:29:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9843:3:105",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9848:1:105",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "9839:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9839:11:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9852:1:105",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "9835:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9835:19:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "9829:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9870:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "9885:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "9893:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "9881:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9881:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9863:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9863:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9863:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9917:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9928:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9913:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9913:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "9937:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "9945:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "9933:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9933:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9906:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9906:43:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9906:43:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9969:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9980:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9965:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9965:18:105"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "9985:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9958:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9958:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9958: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": "9733:9:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "9744:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "9752:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "9760:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "9771:4:105",
                "type": ""
              }
            ],
            "src": "9615:383:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10035:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10052:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10059:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10064:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "10055:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10055:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10045:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10045:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10045:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10092:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10095:4:105",
                        "type": "",
                        "value": "0x11"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10085:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10085:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10085:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10116:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10119:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "10109:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10109:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10109:15:105"
                }
              ]
            },
            "name": "panic_error_0x11",
            "nodeType": "YulFunctionDefinition",
            "src": "10003:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10182:88:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10213:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "10215:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10215:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10215:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "10198:5:105"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10209:1:105",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "10205:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10205:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nodeType": "YulIdentifier",
                      "src": "10195:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10195:17:105"
                  },
                  "nodeType": "YulIf",
                  "src": "10192:43:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10244:20:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "10255:5:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10262:1:105",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10251:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10251:13:105"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "10244:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "increment_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "10164:5:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "10174:3:105",
                "type": ""
              }
            ],
            "src": "10135:135:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10449:181:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10466:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10477:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10459:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10459:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10459:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10500:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10511:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10496:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10496:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10516:2:105",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10489:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10489:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10489:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10539:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10550:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10535:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10535:18:105"
                      },
                      {
                        "hexValue": "43757272656e742066656520697320657175616c20746f206e657720666565",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10555:33:105",
                        "type": "",
                        "value": "Current fee is equal to new fee"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10528:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10528:61:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10528:61:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10598:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10610:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10621:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10606:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10606:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "10598:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_db095f13e245243418ee9a5b7ae0408e2f6a2092be336cf2ec7b5f2ae85b9133__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10426:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10440:4:105",
                "type": ""
              }
            ],
            "src": "10275:355:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10809:238:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10826:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10837:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10819:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10819:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10819:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10860:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10871:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10856:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10856:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10876:2:105",
                        "type": "",
                        "value": "48"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10849:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10849:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10849:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10899:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10910:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10895:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10895:18:105"
                      },
                      {
                        "hexValue": "416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10915:34:105",
                        "type": "",
                        "value": "AccessControl: sender must be an"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10888:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10888:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10888:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10970:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10981:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10966:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10966:18:105"
                      },
                      {
                        "hexValue": "2061646d696e20746f207265766f6b65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10986:18:105",
                        "type": "",
                        "value": " admin to revoke"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10959:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10959:46:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10959:46:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11014:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11026:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11037:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11022:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11022:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "11014:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_64344570eab7406ca49d34d38bf2b2496dfda914405390c5057c8b0aabf798a3__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10786:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10800:4:105",
                "type": ""
              }
            ],
            "src": "10635:412:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11226:234:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11243:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11254:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11236:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11236:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11236:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11277:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11288:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11273:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11273:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11293:2:105",
                        "type": "",
                        "value": "44"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11266:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11266:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11266:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11316:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11327:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11312:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11312:18:105"
                      },
                      {
                        "hexValue": "73656e646572206d75737420626520627269646765206f722066656520726f75",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "11332:34:105",
                        "type": "",
                        "value": "sender must be bridge or fee rou"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11305:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11305:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11305:62:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11387:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11398:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11383:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11383:18:105"
                      },
                      {
                        "hexValue": "74657220636f6e7472616374",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "11403:14:105",
                        "type": "",
                        "value": "ter contract"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11376:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11376:42:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11376:42:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11427:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11439:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11450:3:105",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11435:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11435:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "11427:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0e421896d469e70aea183401bab489f45e95ec1e32ec153a2e00f0f7d7b945ab__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "11203:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "11217:4:105",
                "type": ""
              }
            ],
            "src": "11052:408:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11514:76:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "11536:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "11538:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11538:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "11538:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "11530:1:105"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "11533:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "11527:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11527:8:105"
                  },
                  "nodeType": "YulIf",
                  "src": "11524:34:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11567:17:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "11579:1:105"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "11582:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "11575:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11575:9:105"
                  },
                  "variableNames": [
                    {
                      "name": "diff",
                      "nodeType": "YulIdentifier",
                      "src": "11567:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "checked_sub_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "11496:1:105",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "11499:1:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "diff",
                "nodeType": "YulTypedName",
                "src": "11505:4:105",
                "type": ""
              }
            ],
            "src": "11465:125:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11627:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11644:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11651:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11656:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "11647:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11647:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11637:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11637:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11637:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11684:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11687:4:105",
                        "type": "",
                        "value": "0x31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11677:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11677:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11677:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11708:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11711:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "11701:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11701:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11701:15:105"
                }
              ]
            },
            "name": "panic_error_0x31",
            "nodeType": "YulFunctionDefinition",
            "src": "11595: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 abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\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_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_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_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_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 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": "410:5326:81:-:0;;;1421:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1499:30:81;;;;;1539:50;;;;1599:42;2054:4:96;1630:10:81;1599;:42::i;:::-;1421:227;;410:5326;;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;:::-;410:5326:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "410:5326:81:-: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;;;;;;;;2801:475:81;;;;;;:::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;1723:110:81:-;;;;;;;;;;-1:-1:-1;1812:14:81;;;;;;;;;;;-1:-1:-1;;;1812:14:81;;;;1723:110;;;;1812:14;1723:110;:::i;2086:259::-;;;;;;;;;;-1:-1:-1;2086:259:81;;;;;:::i;:::-;;:::i;602:76::-;;;;;;;;;;-1:-1:-1;602:76:81;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;547:49;;;;;;;;;;;;;;;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;:::-;;;5517:14:105;;5510:22;5492:41;;5480:2;5465:18;2819:137:96;5352: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;5240:226::-;;;;;;;;;;-1:-1:-1;5240:226:96;;;;;:::i;:::-;;:::i;3774:299:81:-;;;;;;;;;;-1:-1:-1;3774:299:81;;;;;:::i;:::-;3998:43;;;3962:7;3998:43;;;:22;:43;;;;;;;;:55;;;;;;;;;;3774:299;;;;;;;;;;;;;;;;6041:25:105;;;-1:-1:-1;;;;;6102:32:105;;;6097:2;6082:18;;6075:60;6014:18;3774:299:81;5867:274:105;2801:475:81;958:21;:19;:21::i;:::-;3031:43:::1;::::0;::::1;3010:18;3031:43:::0;;;:22:::1;:43;::::0;;;;;;;:55;;;;;;;;;3100:9:::1;:23:::0;::::1;3096:67;;3132:31;::::0;-1:-1:-1;;;3132:31:81;;3153:9:::1;3132:31;::::0;::::1;345:25:105::0;318:18;;3132:31:81::1;;;;;;;;3096:67;3178:91;::::0;;-1:-1:-1;;;;;6481:15:105;;6463:34;;6545:4;6533:17;;;6528:2;6513:18;;6506:45;6587:17;;6567:18;;;6560:45;6636:2;6621:18;;6614:34;;;6679:3;6664:19;;6657:35;;;-1:-1:-1;6443:3:105;6708:19;;6701:44;3178:91:81;;::::1;::::0;;;;6412:3:105;3178:91:81;;::::1;3000:276;2801:475:::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;;6958:2:105;4858:105:96;;;6940:21:105;6997:2;6977:18;;;6970:30;7036:34;7016:18;;;7009:62;-1:-1:-1;;;7087:18:105;;;7080:45;7142:19;;4858:105:96;6756: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;;7374:2:105;6035:83:96;;;7356:21:105;7413:2;7393:18;;;7386:30;7452:34;7432:18;;;7425:62;-1:-1:-1;;;7503:18:105;;;7496:45;7558:19;;6035:83:96;7172: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;;7790:2:105;2185:54:81;;;7772:21:105;7829:2;7809:18;;;7802:30;7868:25;7848:18;;;7841:53;7911:18;;2185:54:81;7588: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;;8142:2:105;812:82:81;;;8124:21:105;8181:2;8161:18;;;8154:30;8220:32;8200:18;;;8193:60;8270:18;;812:82:81;7940:354:105;812:82:81;5366:30;;::::1;5358:74;;;::::0;-1:-1:-1;;;5358:74:81;;8501:2:105;5358:74:81::1;::::0;::::1;8483:21:105::0;8540:2;8520:18;;;8513:30;8579:33;8559:18;;;8552:61;8630:18;;5358:74:81::1;8299: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;;9463:2:105;5605:45:81::1;::::0;::::1;9445:21:105::0;9502:2;9482:18;;;9475:30;9541:27;9521:18;;;9514:55;9586:18;;5605:45:81::1;9261: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;;;;;9881:15:105;;;9863:34;;9933:15;;;;9928:2;9913:18;;9906:43;9980:2;9965:18;;9958:34;;;;9813:2;9798:18;;9615: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;;8142:2:105;812:82:81;;;8124:21:105;8181:2;8161:18;;;8154:30;8220:32;8200:18;;;8193:60;8270:18;;812:82:81;7940:354:105;812:82:81;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;;10477:2:105;4681:64:81::1;::::0;::::1;10459:21:105::0;10516:2;10496:18;;;10489:30;10555:33;10535:18;;;10528:61;10606:18;;4681:64:81::1;10275: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;5240:226::-;5332:6;:12;;;;;;;;;;:22;;;5324:45;;719:10:33;2819:137:96;:::i;5324:45::-;5316:106;;;;-1:-1:-1;;;5316:106:96;;10837:2:105;5316:106:96;;;10819:21:105;10876:2;10856:18;;;10849:30;10915:34;10895:18;;;10888:62;-1:-1:-1;;;10966:18:105;;;10959:46;11022:19;;5316:106:96;10635:412:105;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;;11254:2:105;1057:161:81;;;11236:21:105;11293:2;11273:18;;;11266:30;11332:34;11312:18;;;11305:62;-1:-1:-1;;;11383:18:105;;;11376:42;11435:19;;1057:161:81;11052:408:105;1057:161:81;1003:222::o;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;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;;7930:156;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;2269:1388::-;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:597::-;2920:4;2949:2;2978;2967:9;2960:21;3010:6;3004:13;3053:6;3048:2;3037:9;3033:18;3026:34;3078:1;3088:140;3102:6;3099:1;3096:13;3088:140;;;3197:14;;;3193:23;;3187:30;3163:17;;;3182:2;3159:26;3152:66;3117:10;;3088:140;;;3246:6;3243:1;3240:13;3237:91;;;3316:1;3311:2;3302:6;3291:9;3287:22;3283:31;3276:42;3237:91;-1:-1:-1;3389:2:105;3368:15;-1:-1:-1;;3364:29:105;3349:45;;;;3396:2;3345:54;;2808:597;-1:-1:-1;;;2808:597:105:o;3410:247::-;3469:6;3522:2;3510:9;3501:7;3497:23;3493:32;3490:52;;;3538:1;3535;3528:12;3490:52;3577:9;3564:23;3596:31;3621:5;3596:31;:::i;3662:250::-;3728:6;3736;3789:2;3777:9;3768:7;3764:23;3760:32;3757:52;;;3805:1;3802;3795:12;3757:52;3828:27;3845:9;3828:27;:::i;:::-;3818:37;3902:2;3887:18;;;;3874:32;;-1:-1:-1;;;3662:250:105:o;3917:248::-;3985:6;3993;4046:2;4034:9;4025:7;4021:23;4017:32;4014:52;;;4062:1;4059;4052:12;4014:52;-1:-1:-1;;4085:23:105;;;4155:2;4140:18;;;4127:32;;-1:-1:-1;3917:248:105:o;4170:375::-;4241:8;4251:6;4305:3;4298:4;4290:6;4286:17;4282:27;4272:55;;4323:1;4320;4313:12;4272:55;-1:-1:-1;4346:20:105;;4389:18;4378:30;;4375:50;;;4421:1;4418;4411:12;4375:50;4458:4;4450:6;4446:17;4434:29;;4518:3;4511:4;4501:6;4498:1;4494:14;4486:6;4482:27;4478:38;4475:47;4472:67;;;4535:1;4532;4525:12;4550:797;4680:6;4688;4696;4704;4757:2;4745:9;4736:7;4732:23;4728:32;4725:52;;;4773:1;4770;4763:12;4725:52;4813:9;4800:23;4842:18;4883:2;4875:6;4872:14;4869:34;;;4899:1;4896;4889:12;4869:34;4938:78;5008:7;4999:6;4988:9;4984:22;4938:78;:::i;:::-;5035:8;;-1:-1:-1;4912:104:105;-1:-1:-1;5123:2:105;5108:18;;5095:32;;-1:-1:-1;5139:16:105;;;5136:36;;;5168:1;5165;5158:12;5136:36;;5207:80;5279:7;5268:8;5257:9;5253:24;5207:80;:::i;:::-;4550:797;;;;-1:-1:-1;5306:8:105;-1:-1:-1;;;;4550:797:105:o;5544:318::-;5619:6;5627;5635;5688:2;5676:9;5667:7;5663:23;5659:32;5656:52;;;5704:1;5701;5694:12;5656:52;5727:27;5744:9;5727:27;:::i;:::-;5717:37;5801:2;5786:18;;5773:32;;-1:-1:-1;5852:2:105;5837:18;;;5824:32;;5544:318;-1:-1:-1;;;5544:318:105:o;8659:127::-;8720:10;8715:3;8711:20;8708:1;8701:31;8751:4;8748:1;8741:15;8775:4;8772:1;8765:15;10003:127;10064:10;10059:3;10055:20;10052:1;10045:31;10095:4;10092:1;10085:15;10119:4;10116:1;10109:15;10135:135;10174:3;-1:-1:-1;;10195:17:105;;10192:43;;;10215:18;;:::i;:::-;-1:-1:-1;10262:1:105;10251:13;;10135:135::o;11465:125::-;11505:4;11533:1;11530;11527:8;11524:34;;;11538:18;;:::i;:::-;-1:-1:-1;11575:9:105;;11465:125::o;11595:127::-;11656:10;11651:3;11647:20;11644:1;11637:31;11687:4;11684:1;11677:15;11711:4;11708:1;11701:15",
  "source": "// The Licensed Work is (c) 2022 Sygma\n// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity 0.8.11;\n\nimport \"../../interfaces/IFeeHandler.sol\";\nimport \"../../utils/AccessControl.sol\";\nimport \"../../utils/SanityChecks.sol\";\nimport \"../FeeHandlerRouter.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 BasicFeeHandler is IFeeHandler, AccessControl {\n    using SanityChecks for *;\n\n    address public immutable _bridgeAddress;\n    address public immutable _feeHandlerRouterAddress;\n    mapping (uint8 => mapping(bytes32 => uint256)) public _domainResourceIDToFee;\n\n\n    event FeeChanged(\n        uint256 newFee\n    );\n\n    error IncorrectFeeSupplied(uint256);\n\n    modifier onlyAdmin() {\n        require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), \"sender doesn't have admin role\");\n        _;\n    }\n\n    modifier onlyBridgeOrRouter() {\n        _onlyBridgeOrRouter();\n        _;\n    }\n\n    function _onlyBridgeOrRouter() private view {\n        require(\n            msg.sender == _bridgeAddress || msg.sender == _feeHandlerRouterAddress,\n            \"sender must be bridge or fee router contract\"\n        );\n    }\n\n    /**\n        @param bridgeAddress Contract address of previously deployed Bridge.\n        @param feeHandlerRouterAddress Contract address of previously deployed FeeHandlerRouter.\n     */\n    constructor(address bridgeAddress, address feeHandlerRouterAddress) {\n        _bridgeAddress = bridgeAddress;\n        _feeHandlerRouterAddress = feeHandlerRouterAddress;\n        _setupRole(DEFAULT_ADMIN_ROLE, msg.sender);\n    }\n\n    /**\n        @notice Getter function for fee handler type\n     */\n    function feeHandlerType() public virtual override pure returns (string memory) {\n        return \"basic\";\n    }\n\n    /**\n        @notice Removes admin role from {_msgSender()} and grants it to {newAdmin}.\n        @notice Only callable by an address that currently has the admin role.\n        @param newAdmin Address that admin role will be granted to.\n     */\n    function renounceAdmin(address newAdmin) external {\n        address sender = _msgSender();\n        require(sender != newAdmin, 'Cannot renounce oneself');\n        grantRole(DEFAULT_ADMIN_ROLE, newAdmin);\n        renounceRole(DEFAULT_ADMIN_ROLE, sender);\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 to be passed to specified handler.\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) virtual payable external onlyBridgeOrRouter {\n        uint256 currentFee = _domainResourceIDToFee[destinationDomainID][resourceID];\n        if (msg.value != currentFee) revert IncorrectFeeSupplied(msg.value);\n        emit FeeCollected(sender, fromDomainID, destinationDomainID, resourceID, currentFee, address(0));\n    }\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 to be passed to specified handler.\n        @param feeData Additional data to be passed to the fee handler.\n        @return Returns the fee amount.\n     */\n    function calculateFee(address sender, uint8 fromDomainID, uint8 destinationDomainID, bytes32 resourceID, bytes calldata depositData, bytes calldata feeData) virtual external  view returns(uint256, address) {\n        return (_domainResourceIDToFee[destinationDomainID][resourceID], address(0));\n    }\n\n    /**\n        @notice Maps the {newFee} to {destinationDomainID} to {resourceID} in {_domainResourceIDToFee}.\n        @notice Only callable by admin.\n        @param destinationDomainID ID of chain fee will be set.\n        @param resourceID ResourceID for which fee will be set.\n        @param newFee Value to which fee will be updated to for the provided {destinationDomainID} and {resourceID}.\n     */\n    function changeFee(uint8 destinationDomainID, bytes32 resourceID, uint256 newFee) external onlyAdmin {\n        uint256 currentFee = _domainResourceIDToFee[destinationDomainID][resourceID];\n        require(currentFee != newFee, \"Current fee is equal to new fee\");\n        _domainResourceIDToFee[destinationDomainID][resourceID] = newFee;\n        emit FeeChanged(newFee);\n    }\n\n    /**\n        @notice Transfers eth in 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 (in WEI) from amounts at index 0.\n        @param addrs Array of addresses to transfer {amounts} to.\n        @param amounts Array of amounts to transfer to {addrs}.\n     */\n    function transferFee(address payable[] calldata addrs, uint[] calldata amounts) external onlyAdmin {\n        require(addrs.length == amounts.length, \"addrs[], amounts[]: diff length\");\n        for (uint256 i = 0; i < addrs.length; i++) {\n            addrs[i].mustNotBeZero();\n            (bool success,) = addrs[i].call{value: amounts[i]}(\"\");\n            require(success, \"Fee ether transfer failed\");\n            emit FeeDistributed(address(0), addrs[i], amounts[i]);\n        }\n    }\n}\n",
  "sourcePath": "/home/runner/work/sygma-solidity/sygma-solidity/contracts/handlers/fee/BasicFeeHandler.sol",
  "ast": {
    "absolutePath": "project:/contracts/handlers/fee/BasicFeeHandler.sol",
    "exportedSymbols": {
      "AccessControl": [
        18612
      ],
      "Address": [
        5283
      ],
      "BasicFeeHandler": [
        16514
      ],
      "Context": [
        5305
      ],
      "EnumerableSet": [
        7373
      ],
      "FeeHandlerRouter": [
        15170
      ],
      "IFeeHandler": [
        18265
      ],
      "SanityChecks": [
        19158
      ]
    },
    "id": 16515,
    "license": "LGPL-3.0-only",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 16192,
        "literals": [
          "solidity",
          "0.8",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "81:23:81"
      },
      {
        "absolutePath": "project:/contracts/interfaces/IFeeHandler.sol",
        "file": "../../interfaces/IFeeHandler.sol",
        "id": 16193,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 16515,
        "sourceUnit": 18266,
        "src": "106:42:81",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/utils/AccessControl.sol",
        "file": "../../utils/AccessControl.sol",
        "id": 16194,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 16515,
        "sourceUnit": 18613,
        "src": "149:39:81",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/utils/SanityChecks.sol",
        "file": "../../utils/SanityChecks.sol",
        "id": 16195,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 16515,
        "sourceUnit": 19159,
        "src": "189:38:81",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/handlers/FeeHandlerRouter.sol",
        "file": "../FeeHandlerRouter.sol",
        "id": 16196,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 16515,
        "sourceUnit": 15171,
        "src": "228:33:81",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 16198,
              "name": "IFeeHandler",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 18265,
              "src": "438:11:81"
            },
            "id": 16199,
            "nodeType": "InheritanceSpecifier",
            "src": "438:11:81"
          },
          {
            "baseName": {
              "id": 16200,
              "name": "AccessControl",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 18612,
              "src": "451:13:81"
            },
            "id": 16201,
            "nodeType": "InheritanceSpecifier",
            "src": "451:13:81"
          }
        ],
        "canonicalName": "BasicFeeHandler",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 16197,
          "nodeType": "StructuredDocumentation",
          "src": "263:146:81",
          "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": 16514,
        "linearizedBaseContracts": [
          16514,
          18612,
          5305,
          18265
        ],
        "name": "BasicFeeHandler",
        "nameLocation": "419:15:81",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 16203,
            "libraryName": {
              "id": 16202,
              "name": "SanityChecks",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 19158,
              "src": "477:12:81"
            },
            "nodeType": "UsingForDirective",
            "src": "471:25:81"
          },
          {
            "constant": false,
            "functionSelector": "318c136e",
            "id": 16205,
            "mutability": "immutable",
            "name": "_bridgeAddress",
            "nameLocation": "527:14:81",
            "nodeType": "VariableDeclaration",
            "scope": 16514,
            "src": "502:39:81",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 16204,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "502:7:81",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "745e6b61",
            "id": 16207,
            "mutability": "immutable",
            "name": "_feeHandlerRouterAddress",
            "nameLocation": "572:24:81",
            "nodeType": "VariableDeclaration",
            "scope": 16514,
            "src": "547:49:81",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 16206,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "547:7:81",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "632d589c",
            "id": 16213,
            "mutability": "mutable",
            "name": "_domainResourceIDToFee",
            "nameLocation": "656:22:81",
            "nodeType": "VariableDeclaration",
            "scope": 16514,
            "src": "602:76:81",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
              "typeString": "mapping(uint8 => mapping(bytes32 => uint256))"
            },
            "typeName": {
              "id": 16212,
              "keyType": {
                "id": 16208,
                "name": "uint8",
                "nodeType": "ElementaryTypeName",
                "src": "611:5:81",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                }
              },
              "nodeType": "Mapping",
              "src": "602:46:81",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
                "typeString": "mapping(uint8 => mapping(bytes32 => uint256))"
              },
              "valueType": {
                "id": 16211,
                "keyType": {
                  "id": 16209,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "628:7:81",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "nodeType": "Mapping",
                "src": "620:27:81",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                  "typeString": "mapping(bytes32 => uint256)"
                },
                "valueType": {
                  "id": 16210,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "639:7:81",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "id": 16217,
            "name": "FeeChanged",
            "nameLocation": "692:10:81",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 16216,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16215,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newFee",
                  "nameLocation": "720:6:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16217,
                  "src": "712:14:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16214,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "712:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "702:30:81"
            },
            "src": "686:47:81"
          },
          {
            "id": 16221,
            "name": "IncorrectFeeSupplied",
            "nameLocation": "745:20:81",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 16220,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16219,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 16221,
                  "src": "766:7:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16218,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "766:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "765:9:81"
            },
            "src": "739:36:81"
          },
          {
            "body": {
              "id": 16233,
              "nodeType": "Block",
              "src": "802:110:81",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 16225,
                            "name": "DEFAULT_ADMIN_ROLE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18344,
                            "src": "828:18:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "expression": {
                              "id": 16226,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "848:3:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 16227,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "848:10:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 16224,
                          "name": "hasRole",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18381,
                          "src": "820:7:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (bytes32,address) view returns (bool)"
                          }
                        },
                        "id": 16228,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "820:39:81",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "73656e64657220646f65736e277420686176652061646d696e20726f6c65",
                        "id": 16229,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "861:32:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cccb3b305edc7308d7027b1001041a46b235f7d3213d690bb469676069d9b205",
                          "typeString": "literal_string \"sender doesn't have admin role\""
                        },
                        "value": "sender doesn't have admin role"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cccb3b305edc7308d7027b1001041a46b235f7d3213d690bb469676069d9b205",
                          "typeString": "literal_string \"sender doesn't have admin role\""
                        }
                      ],
                      "id": 16223,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "812:7:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16230,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "812:82:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16231,
                  "nodeType": "ExpressionStatement",
                  "src": "812:82:81"
                },
                {
                  "id": 16232,
                  "nodeType": "PlaceholderStatement",
                  "src": "904:1:81"
                }
              ]
            },
            "id": 16234,
            "name": "onlyAdmin",
            "nameLocation": "790:9:81",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 16222,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "799:2:81"
            },
            "src": "781:131:81",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 16240,
              "nodeType": "Block",
              "src": "948:49:81",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 16236,
                      "name": "_onlyBridgeOrRouter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16258,
                      "src": "958:19:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$__$",
                        "typeString": "function () view"
                      }
                    },
                    "id": 16237,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "958:21:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16238,
                  "nodeType": "ExpressionStatement",
                  "src": "958:21:81"
                },
                {
                  "id": 16239,
                  "nodeType": "PlaceholderStatement",
                  "src": "989:1:81"
                }
              ]
            },
            "id": 16241,
            "name": "onlyBridgeOrRouter",
            "nameLocation": "927:18:81",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 16235,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "945:2:81"
            },
            "src": "918:79:81",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 16257,
              "nodeType": "Block",
              "src": "1047:178:81",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 16253,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 16248,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 16245,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "1078:3:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 16246,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "1078:10:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 16247,
                            "name": "_bridgeAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16205,
                            "src": "1092:14:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1078:28:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 16252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 16249,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "1110:3:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 16250,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "1110:10:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 16251,
                            "name": "_feeHandlerRouterAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16207,
                            "src": "1124:24:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1110:38:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1078:70:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "73656e646572206d75737420626520627269646765206f722066656520726f7574657220636f6e7472616374",
                        "id": 16254,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1162:46:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0e421896d469e70aea183401bab489f45e95ec1e32ec153a2e00f0f7d7b945ab",
                          "typeString": "literal_string \"sender must be bridge or fee router contract\""
                        },
                        "value": "sender must be bridge or fee router contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0e421896d469e70aea183401bab489f45e95ec1e32ec153a2e00f0f7d7b945ab",
                          "typeString": "literal_string \"sender must be bridge or fee router contract\""
                        }
                      ],
                      "id": 16244,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1057:7:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1057:161:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16256,
                  "nodeType": "ExpressionStatement",
                  "src": "1057:161:81"
                }
              ]
            },
            "id": 16258,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_onlyBridgeOrRouter",
            "nameLocation": "1012:19:81",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16242,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1031:2:81"
            },
            "returnParameters": {
              "id": 16243,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1047:0:81"
            },
            "scope": 16514,
            "src": "1003:222:81",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 16280,
              "nodeType": "Block",
              "src": "1489:159:81",
              "statements": [
                {
                  "expression": {
                    "id": 16268,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 16266,
                      "name": "_bridgeAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16205,
                      "src": "1499:14:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 16267,
                      "name": "bridgeAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16261,
                      "src": "1516:13:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1499:30:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 16269,
                  "nodeType": "ExpressionStatement",
                  "src": "1499:30:81"
                },
                {
                  "expression": {
                    "id": 16272,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 16270,
                      "name": "_feeHandlerRouterAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16207,
                      "src": "1539:24:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 16271,
                      "name": "feeHandlerRouterAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16263,
                      "src": "1566:23:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1539:50:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 16273,
                  "nodeType": "ExpressionStatement",
                  "src": "1539:50:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 16275,
                        "name": "DEFAULT_ADMIN_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18344,
                        "src": "1610:18:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "expression": {
                          "id": 16276,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "1630:3:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 16277,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1630:10:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 16274,
                      "name": "_setupRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18547,
                      "src": "1599:10:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 16278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1599:42:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16279,
                  "nodeType": "ExpressionStatement",
                  "src": "1599:42:81"
                }
              ]
            },
            "documentation": {
              "id": 16259,
              "nodeType": "StructuredDocumentation",
              "src": "1231:185:81",
              "text": "@param bridgeAddress Contract address of previously deployed Bridge.\n@param feeHandlerRouterAddress Contract address of previously deployed FeeHandlerRouter."
            },
            "id": 16281,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16264,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16261,
                  "mutability": "mutable",
                  "name": "bridgeAddress",
                  "nameLocation": "1441:13:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16281,
                  "src": "1433:21:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16260,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1433:7:81",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16263,
                  "mutability": "mutable",
                  "name": "feeHandlerRouterAddress",
                  "nameLocation": "1464:23:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16281,
                  "src": "1456:31:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16262,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1456:7:81",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1432:56:81"
            },
            "returnParameters": {
              "id": 16265,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1489:0:81"
            },
            "scope": 16514,
            "src": "1421:227:81",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              18264
            ],
            "body": {
              "id": 16290,
              "nodeType": "Block",
              "src": "1802:31:81",
              "statements": [
                {
                  "expression": {
                    "hexValue": "6261736963",
                    "id": 16288,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1819:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_a542bebe0be4ee37844e1023969dcdf99c908139f19a527065ff05d1a0ac2e34",
                      "typeString": "literal_string \"basic\""
                    },
                    "value": "basic"
                  },
                  "functionReturnParameters": 16287,
                  "id": 16289,
                  "nodeType": "Return",
                  "src": "1812:14:81"
                }
              ]
            },
            "documentation": {
              "id": 16282,
              "nodeType": "StructuredDocumentation",
              "src": "1654:64:81",
              "text": "@notice Getter function for fee handler type"
            },
            "functionSelector": "542774b5",
            "id": 16291,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "feeHandlerType",
            "nameLocation": "1732:14:81",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 16284,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1764:8:81"
            },
            "parameters": {
              "id": 16283,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1746:2:81"
            },
            "returnParameters": {
              "id": 16287,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16286,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 16291,
                  "src": "1787:13:81",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 16285,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1787:6:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1786:15:81"
            },
            "scope": 16514,
            "src": "1723:110:81",
            "stateMutability": "pure",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 16319,
              "nodeType": "Block",
              "src": "2136:209:81",
              "statements": [
                {
                  "assignments": [
                    16298
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16298,
                      "mutability": "mutable",
                      "name": "sender",
                      "nameLocation": "2154:6:81",
                      "nodeType": "VariableDeclaration",
                      "scope": 16319,
                      "src": "2146:14:81",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 16297,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2146:7:81",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16301,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 16299,
                      "name": "_msgSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5295,
                      "src": "2163:10:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 16300,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2163:12:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2146:29:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 16305,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 16303,
                          "name": "sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16298,
                          "src": "2193:6:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "id": 16304,
                          "name": "newAdmin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16294,
                          "src": "2203:8:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2193:18:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "43616e6e6f742072656e6f756e6365206f6e6573656c66",
                        "id": 16306,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2213:25:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ab1c5f98bafd089c448d0f437f7951a06dfd484be68434b4420ed4d39647c206",
                          "typeString": "literal_string \"Cannot renounce oneself\""
                        },
                        "value": "Cannot renounce oneself"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ab1c5f98bafd089c448d0f437f7951a06dfd484be68434b4420ed4d39647c206",
                          "typeString": "literal_string \"Cannot renounce oneself\""
                        }
                      ],
                      "id": 16302,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2185:7:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2185:54:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16308,
                  "nodeType": "ExpressionStatement",
                  "src": "2185:54:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 16310,
                        "name": "DEFAULT_ADMIN_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18344,
                        "src": "2259:18:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 16311,
                        "name": "newAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16294,
                        "src": "2279:8:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 16309,
                      "name": "grantRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18485,
                      "src": "2249:9:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 16312,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2249:39:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16313,
                  "nodeType": "ExpressionStatement",
                  "src": "2249:39:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 16315,
                        "name": "DEFAULT_ADMIN_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18344,
                        "src": "2311:18:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 16316,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16298,
                        "src": "2331:6:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 16314,
                      "name": "renounceRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18533,
                      "src": "2298:12:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 16317,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2298:40:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16318,
                  "nodeType": "ExpressionStatement",
                  "src": "2298:40:81"
                }
              ]
            },
            "documentation": {
              "id": 16292,
              "nodeType": "StructuredDocumentation",
              "src": "1839:242:81",
              "text": "@notice Removes admin role from {_msgSender()} and grants it to {newAdmin}.\n@notice Only callable by an address that currently has the admin role.\n@param newAdmin Address that admin role will be granted to."
            },
            "functionSelector": "5e1fab0f",
            "id": 16320,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "renounceAdmin",
            "nameLocation": "2095:13:81",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16295,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16294,
                  "mutability": "mutable",
                  "name": "newAdmin",
                  "nameLocation": "2117:8:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16320,
                  "src": "2109:16:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16293,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2109:7:81",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2108:18:81"
            },
            "returnParameters": {
              "id": 16296,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2136:0:81"
            },
            "scope": 16514,
            "src": "2086:259:81",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              18238
            ],
            "body": {
              "id": 16368,
              "nodeType": "Block",
              "src": "3000:276:81",
              "statements": [
                {
                  "assignments": [
                    16339
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16339,
                      "mutability": "mutable",
                      "name": "currentFee",
                      "nameLocation": "3018:10:81",
                      "nodeType": "VariableDeclaration",
                      "scope": 16368,
                      "src": "3010:18:81",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 16338,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3010:7:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16345,
                  "initialValue": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 16340,
                        "name": "_domainResourceIDToFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16213,
                        "src": "3031:22:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
                          "typeString": "mapping(uint8 => mapping(bytes32 => uint256))"
                        }
                      },
                      "id": 16342,
                      "indexExpression": {
                        "id": 16341,
                        "name": "destinationDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16327,
                        "src": "3054:19:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3031:43:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                        "typeString": "mapping(bytes32 => uint256)"
                      }
                    },
                    "id": 16344,
                    "indexExpression": {
                      "id": 16343,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16329,
                      "src": "3075:10:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3031:55:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3010:76:81"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 16349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 16346,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967281,
                        "src": "3100:3:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 16347,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "src": "3100:9:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "id": 16348,
                      "name": "currentFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16339,
                      "src": "3113:10:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3100:23:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 16355,
                  "nodeType": "IfStatement",
                  "src": "3096:67:81",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 16351,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967281,
                            "src": "3153:3:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 16352,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "src": "3153:9:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 16350,
                        "name": "IncorrectFeeSupplied",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16221,
                        "src": "3132:20:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$__$",
                          "typeString": "function (uint256) pure"
                        }
                      },
                      "id": 16353,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3132:31:81",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 16354,
                    "nodeType": "RevertStatement",
                    "src": "3125:38:81"
                  }
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 16357,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16323,
                        "src": "3191:6:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 16358,
                        "name": "fromDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16325,
                        "src": "3199:12:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 16359,
                        "name": "destinationDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16327,
                        "src": "3213:19:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 16360,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16329,
                        "src": "3234:10:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 16361,
                        "name": "currentFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16339,
                        "src": "3246:10:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 16364,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3266:1:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 16363,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3258:7:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 16362,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3258:7:81",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 16365,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3258:10:81",
                        "tryCall": false,
                        "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": 16356,
                      "name": "FeeCollected",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18213,
                      "src": "3178:12:81",
                      "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": 16366,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3178:91:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16367,
                  "nodeType": "EmitStatement",
                  "src": "3173:96:81"
                }
              ]
            },
            "documentation": {
              "id": 16321,
              "nodeType": "StructuredDocumentation",
              "src": "2351:445:81",
              "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 to be passed to specified handler.\n@param feeData Additional data to be passed to the fee handler."
            },
            "functionSelector": "25307065",
            "id": 16369,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 16336,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 16335,
                  "name": "onlyBridgeOrRouter",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 16241,
                  "src": "2981:18:81"
                },
                "nodeType": "ModifierInvocation",
                "src": "2981:18:81"
              }
            ],
            "name": "collectFee",
            "nameLocation": "2810:10:81",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16334,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16323,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "2829:6:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16369,
                  "src": "2821:14:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16322,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2821:7:81",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16325,
                  "mutability": "mutable",
                  "name": "fromDomainID",
                  "nameLocation": "2843:12:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16369,
                  "src": "2837:18:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16324,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2837:5:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16327,
                  "mutability": "mutable",
                  "name": "destinationDomainID",
                  "nameLocation": "2863:19:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16369,
                  "src": "2857:25:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16326,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2857:5:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16329,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "2892:10:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16369,
                  "src": "2884:18:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 16328,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2884:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16331,
                  "mutability": "mutable",
                  "name": "depositData",
                  "nameLocation": "2919:11:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16369,
                  "src": "2904:26:81",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16330,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2904:5:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16333,
                  "mutability": "mutable",
                  "name": "feeData",
                  "nameLocation": "2947:7:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16369,
                  "src": "2932:22:81",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16332,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2932:5:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2820:135:81"
            },
            "returnParameters": {
              "id": 16337,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3000:0:81"
            },
            "scope": 16514,
            "src": "2801:475:81",
            "stateMutability": "payable",
            "virtual": true,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              18258
            ],
            "body": {
              "id": 16400,
              "nodeType": "Block",
              "src": "3980:93:81",
              "statements": [
                {
                  "expression": {
                    "components": [
                      {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 16389,
                            "name": "_domainResourceIDToFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16213,
                            "src": "3998:22:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
                              "typeString": "mapping(uint8 => mapping(bytes32 => uint256))"
                            }
                          },
                          "id": 16391,
                          "indexExpression": {
                            "id": 16390,
                            "name": "destinationDomainID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16376,
                            "src": "4021:19:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3998:43:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                            "typeString": "mapping(bytes32 => uint256)"
                          }
                        },
                        "id": 16393,
                        "indexExpression": {
                          "id": 16392,
                          "name": "resourceID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16378,
                          "src": "4042:10:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3998:55:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 16396,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4063:1:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 16395,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4055:7:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 16394,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4055:7:81",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 16397,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4055:10:81",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "id": 16398,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3997:69:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_address_$",
                      "typeString": "tuple(uint256,address)"
                    }
                  },
                  "functionReturnParameters": 16388,
                  "id": 16399,
                  "nodeType": "Return",
                  "src": "3990:76:81"
                }
              ]
            },
            "documentation": {
              "id": 16370,
              "nodeType": "StructuredDocumentation",
              "src": "3282:487:81",
              "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 to be passed to specified handler.\n@param feeData Additional data to be passed to the fee handler.\n@return Returns the fee amount."
            },
            "functionSelector": "ef4f081f",
            "id": 16401,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateFee",
            "nameLocation": "3783:12:81",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16383,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16372,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "3804:6:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16401,
                  "src": "3796:14:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16371,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3796:7:81",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16374,
                  "mutability": "mutable",
                  "name": "fromDomainID",
                  "nameLocation": "3818:12:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16401,
                  "src": "3812:18:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16373,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3812:5:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16376,
                  "mutability": "mutable",
                  "name": "destinationDomainID",
                  "nameLocation": "3838:19:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16401,
                  "src": "3832:25:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16375,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3832:5:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16378,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "3867:10:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16401,
                  "src": "3859:18:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 16377,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3859:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16380,
                  "mutability": "mutable",
                  "name": "depositData",
                  "nameLocation": "3894:11:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16401,
                  "src": "3879:26:81",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16379,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3879:5:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16382,
                  "mutability": "mutable",
                  "name": "feeData",
                  "nameLocation": "3922:7:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16401,
                  "src": "3907:22:81",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16381,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3907:5:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3795:135:81"
            },
            "returnParameters": {
              "id": 16388,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16385,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 16401,
                  "src": "3962:7:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16384,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3962:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16387,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 16401,
                  "src": "3971:7:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16386,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3971:7:81",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3961:18:81"
            },
            "scope": 16514,
            "src": "3774:299:81",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "external"
          },
          {
            "body": {
              "id": 16440,
              "nodeType": "Block",
              "src": "4585:274:81",
              "statements": [
                {
                  "assignments": [
                    16414
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16414,
                      "mutability": "mutable",
                      "name": "currentFee",
                      "nameLocation": "4603:10:81",
                      "nodeType": "VariableDeclaration",
                      "scope": 16440,
                      "src": "4595:18:81",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 16413,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4595:7:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16420,
                  "initialValue": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 16415,
                        "name": "_domainResourceIDToFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16213,
                        "src": "4616:22:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
                          "typeString": "mapping(uint8 => mapping(bytes32 => uint256))"
                        }
                      },
                      "id": 16417,
                      "indexExpression": {
                        "id": 16416,
                        "name": "destinationDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16404,
                        "src": "4639:19:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "4616:43:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                        "typeString": "mapping(bytes32 => uint256)"
                      }
                    },
                    "id": 16419,
                    "indexExpression": {
                      "id": 16418,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16406,
                      "src": "4660:10:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4616:55:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4595:76:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 16424,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 16422,
                          "name": "currentFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16414,
                          "src": "4689:10:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "id": 16423,
                          "name": "newFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16408,
                          "src": "4703:6:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4689:20:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "43757272656e742066656520697320657175616c20746f206e657720666565",
                        "id": 16425,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4711:33:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_db095f13e245243418ee9a5b7ae0408e2f6a2092be336cf2ec7b5f2ae85b9133",
                          "typeString": "literal_string \"Current fee is equal to new fee\""
                        },
                        "value": "Current fee is equal to new fee"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_db095f13e245243418ee9a5b7ae0408e2f6a2092be336cf2ec7b5f2ae85b9133",
                          "typeString": "literal_string \"Current fee is equal to new fee\""
                        }
                      ],
                      "id": 16421,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "4681:7:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4681:64:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16427,
                  "nodeType": "ExpressionStatement",
                  "src": "4681:64:81"
                },
                {
                  "expression": {
                    "id": 16434,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 16428,
                          "name": "_domainResourceIDToFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16213,
                          "src": "4755:22:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
                            "typeString": "mapping(uint8 => mapping(bytes32 => uint256))"
                          }
                        },
                        "id": 16431,
                        "indexExpression": {
                          "id": 16429,
                          "name": "destinationDomainID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16404,
                          "src": "4778:19:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4755:43:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                          "typeString": "mapping(bytes32 => uint256)"
                        }
                      },
                      "id": 16432,
                      "indexExpression": {
                        "id": 16430,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16406,
                        "src": "4799:10:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4755:55:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 16433,
                      "name": "newFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16408,
                      "src": "4813:6:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4755:64:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 16435,
                  "nodeType": "ExpressionStatement",
                  "src": "4755:64:81"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 16437,
                        "name": "newFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16408,
                        "src": "4845:6:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 16436,
                      "name": "FeeChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16217,
                      "src": "4834:10:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 16438,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4834:18:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16439,
                  "nodeType": "EmitStatement",
                  "src": "4829:23:81"
                }
              ]
            },
            "documentation": {
              "id": 16402,
              "nodeType": "StructuredDocumentation",
              "src": "4079:400:81",
              "text": "@notice Maps the {newFee} to {destinationDomainID} to {resourceID} in {_domainResourceIDToFee}.\n@notice Only callable by admin.\n@param destinationDomainID ID of chain fee will be set.\n@param resourceID ResourceID for which fee will be set.\n@param newFee Value to which fee will be updated to for the provided {destinationDomainID} and {resourceID}."
            },
            "functionSelector": "abc9db0b",
            "id": 16441,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 16411,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 16410,
                  "name": "onlyAdmin",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 16234,
                  "src": "4575:9:81"
                },
                "nodeType": "ModifierInvocation",
                "src": "4575:9:81"
              }
            ],
            "name": "changeFee",
            "nameLocation": "4493:9:81",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16409,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16404,
                  "mutability": "mutable",
                  "name": "destinationDomainID",
                  "nameLocation": "4509:19:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16441,
                  "src": "4503:25:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16403,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "4503:5:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16406,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "4538:10:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16441,
                  "src": "4530:18:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 16405,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4530:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16408,
                  "mutability": "mutable",
                  "name": "newFee",
                  "nameLocation": "4558:6:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16441,
                  "src": "4550:14:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16407,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4550:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4502:63:81"
            },
            "returnParameters": {
              "id": 16412,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4585:0:81"
            },
            "scope": 16514,
            "src": "4484:375:81",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 16512,
              "nodeType": "Block",
              "src": "5348:386:81",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 16458,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 16454,
                            "name": "addrs",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16445,
                            "src": "5366:5:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                              "typeString": "address payable[] calldata"
                            }
                          },
                          "id": 16455,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "5366:12:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 16456,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16448,
                            "src": "5382:7:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 16457,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "5382:14:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5366:30:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "61646472735b5d2c20616d6f756e74735b5d3a2064696666206c656e677468",
                        "id": 16459,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5398:33:81",
                        "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": 16453,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5358:7:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5358:74:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16461,
                  "nodeType": "ExpressionStatement",
                  "src": "5358:74:81"
                },
                {
                  "body": {
                    "id": 16510,
                    "nodeType": "Block",
                    "src": "5485:243:81",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "baseExpression": {
                                "id": 16473,
                                "name": "addrs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16445,
                                "src": "5499:5:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                                  "typeString": "address payable[] calldata"
                                }
                              },
                              "id": 16475,
                              "indexExpression": {
                                "id": 16474,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16463,
                                "src": "5505:1:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5499:8:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "id": 16476,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mustNotBeZero",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19136,
                            "src": "5499:22:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_address_$bound_to$_t_address_$",
                              "typeString": "function (address) pure returns (address)"
                            }
                          },
                          "id": 16477,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5499:24:81",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 16478,
                        "nodeType": "ExpressionStatement",
                        "src": "5499:24:81"
                      },
                      {
                        "assignments": [
                          16480,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 16480,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "5543:7:81",
                            "nodeType": "VariableDeclaration",
                            "scope": 16510,
                            "src": "5538:12:81",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 16479,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "5538:4:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 16491,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "",
                              "id": 16489,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5588:2:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                  "typeString": "literal_string \"\""
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 16481,
                                  "name": "addrs",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16445,
                                  "src": "5555:5:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                                    "typeString": "address payable[] calldata"
                                  }
                                },
                                "id": 16483,
                                "indexExpression": {
                                  "id": 16482,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16463,
                                  "src": "5561:1:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "5555:8:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "id": 16484,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "src": "5555:13:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 16488,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "baseExpression": {
                                  "id": 16485,
                                  "name": "amounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16448,
                                  "src": "5576:7:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                    "typeString": "uint256[] calldata"
                                  }
                                },
                                "id": 16487,
                                "indexExpression": {
                                  "id": 16486,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16463,
                                  "src": "5584:1:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "5576:10:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "5555:32:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 16490,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5555:36:81",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5537:54:81"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 16493,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16480,
                              "src": "5613:7:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "466565206574686572207472616e73666572206661696c6564",
                              "id": 16494,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5622:27:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c83ea8d31d5b2432d5661a262a1c8abcb30052289f0faa441155730eeab43e0a",
                                "typeString": "literal_string \"Fee ether transfer failed\""
                              },
                              "value": "Fee ether transfer failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c83ea8d31d5b2432d5661a262a1c8abcb30052289f0faa441155730eeab43e0a",
                                "typeString": "literal_string \"Fee ether transfer failed\""
                              }
                            ],
                            "id": 16492,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "5605:7:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 16495,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5605:45:81",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 16496,
                        "nodeType": "ExpressionStatement",
                        "src": "5605:45:81"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 16500,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5692:1:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 16499,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5684:7:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 16498,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5684:7:81",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 16501,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5684:10:81",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 16502,
                                "name": "addrs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16445,
                                "src": "5696:5:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                                  "typeString": "address payable[] calldata"
                                }
                              },
                              "id": 16504,
                              "indexExpression": {
                                "id": 16503,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16463,
                                "src": "5702:1:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5696:8:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 16505,
                                "name": "amounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16448,
                                "src": "5706:7:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 16507,
                              "indexExpression": {
                                "id": 16506,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16463,
                                "src": "5714:1:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5706:10:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 16497,
                            "name": "FeeDistributed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18222,
                            "src": "5669:14:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 16508,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5669:48:81",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 16509,
                        "nodeType": "EmitStatement",
                        "src": "5664:53:81"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 16469,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 16466,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16463,
                      "src": "5462:1:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 16467,
                        "name": "addrs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16445,
                        "src": "5466:5:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                          "typeString": "address payable[] calldata"
                        }
                      },
                      "id": 16468,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "5466:12:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5462:16:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 16511,
                  "initializationExpression": {
                    "assignments": [
                      16463
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 16463,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "5455:1:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 16511,
                        "src": "5447:9:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 16462,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5447:7:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 16465,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 16464,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5459:1:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "5447:13:81"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 16471,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "5480:3:81",
                      "subExpression": {
                        "id": 16470,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16463,
                        "src": "5480:1:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 16472,
                    "nodeType": "ExpressionStatement",
                    "src": "5480:3:81"
                  },
                  "nodeType": "ForStatement",
                  "src": "5442:286:81"
                }
              ]
            },
            "documentation": {
              "id": 16442,
              "nodeType": "StructuredDocumentation",
              "src": "4865:379:81",
              "text": "@notice Transfers eth in 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 (in WEI) from amounts at index 0.\n@param addrs Array of addresses to transfer {amounts} to.\n@param amounts Array of amounts to transfer to {addrs}."
            },
            "functionSelector": "904e9b2b",
            "id": 16513,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 16451,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 16450,
                  "name": "onlyAdmin",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 16234,
                  "src": "5338:9:81"
                },
                "nodeType": "ModifierInvocation",
                "src": "5338:9:81"
              }
            ],
            "name": "transferFee",
            "nameLocation": "5258:11:81",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16449,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16445,
                  "mutability": "mutable",
                  "name": "addrs",
                  "nameLocation": "5297:5:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16513,
                  "src": "5270:32:81",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                    "typeString": "address payable[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 16443,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "5270:15:81",
                      "stateMutability": "payable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 16444,
                    "nodeType": "ArrayTypeName",
                    "src": "5270:17:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                      "typeString": "address payable[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16448,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nameLocation": "5320:7:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16513,
                  "src": "5304:23:81",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 16446,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "5304:4:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 16447,
                    "nodeType": "ArrayTypeName",
                    "src": "5304:6:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5269:59:81"
            },
            "returnParameters": {
              "id": 16452,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5348:0:81"
            },
            "scope": 16514,
            "src": "5249:485:81",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 16515,
        "src": "410:5326:81",
        "usedErrors": [
          16221,
          19110
        ]
      }
    ],
    "src": "81:5656:81"
  },
  "legacyAST": {
    "absolutePath": "project:/contracts/handlers/fee/BasicFeeHandler.sol",
    "exportedSymbols": {
      "AccessControl": [
        18612
      ],
      "Address": [
        5283
      ],
      "BasicFeeHandler": [
        16514
      ],
      "Context": [
        5305
      ],
      "EnumerableSet": [
        7373
      ],
      "FeeHandlerRouter": [
        15170
      ],
      "IFeeHandler": [
        18265
      ],
      "SanityChecks": [
        19158
      ]
    },
    "id": 16515,
    "license": "LGPL-3.0-only",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 16192,
        "literals": [
          "solidity",
          "0.8",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "81:23:81"
      },
      {
        "absolutePath": "project:/contracts/interfaces/IFeeHandler.sol",
        "file": "../../interfaces/IFeeHandler.sol",
        "id": 16193,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 16515,
        "sourceUnit": 18266,
        "src": "106:42:81",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/utils/AccessControl.sol",
        "file": "../../utils/AccessControl.sol",
        "id": 16194,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 16515,
        "sourceUnit": 18613,
        "src": "149:39:81",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/utils/SanityChecks.sol",
        "file": "../../utils/SanityChecks.sol",
        "id": 16195,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 16515,
        "sourceUnit": 19159,
        "src": "189:38:81",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/handlers/FeeHandlerRouter.sol",
        "file": "../FeeHandlerRouter.sol",
        "id": 16196,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 16515,
        "sourceUnit": 15171,
        "src": "228:33:81",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 16198,
              "name": "IFeeHandler",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 18265,
              "src": "438:11:81"
            },
            "id": 16199,
            "nodeType": "InheritanceSpecifier",
            "src": "438:11:81"
          },
          {
            "baseName": {
              "id": 16200,
              "name": "AccessControl",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 18612,
              "src": "451:13:81"
            },
            "id": 16201,
            "nodeType": "InheritanceSpecifier",
            "src": "451:13:81"
          }
        ],
        "canonicalName": "BasicFeeHandler",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 16197,
          "nodeType": "StructuredDocumentation",
          "src": "263:146:81",
          "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": 16514,
        "linearizedBaseContracts": [
          16514,
          18612,
          5305,
          18265
        ],
        "name": "BasicFeeHandler",
        "nameLocation": "419:15:81",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 16203,
            "libraryName": {
              "id": 16202,
              "name": "SanityChecks",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 19158,
              "src": "477:12:81"
            },
            "nodeType": "UsingForDirective",
            "src": "471:25:81"
          },
          {
            "constant": false,
            "functionSelector": "318c136e",
            "id": 16205,
            "mutability": "immutable",
            "name": "_bridgeAddress",
            "nameLocation": "527:14:81",
            "nodeType": "VariableDeclaration",
            "scope": 16514,
            "src": "502:39:81",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 16204,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "502:7:81",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "745e6b61",
            "id": 16207,
            "mutability": "immutable",
            "name": "_feeHandlerRouterAddress",
            "nameLocation": "572:24:81",
            "nodeType": "VariableDeclaration",
            "scope": 16514,
            "src": "547:49:81",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 16206,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "547:7:81",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "632d589c",
            "id": 16213,
            "mutability": "mutable",
            "name": "_domainResourceIDToFee",
            "nameLocation": "656:22:81",
            "nodeType": "VariableDeclaration",
            "scope": 16514,
            "src": "602:76:81",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
              "typeString": "mapping(uint8 => mapping(bytes32 => uint256))"
            },
            "typeName": {
              "id": 16212,
              "keyType": {
                "id": 16208,
                "name": "uint8",
                "nodeType": "ElementaryTypeName",
                "src": "611:5:81",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                }
              },
              "nodeType": "Mapping",
              "src": "602:46:81",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
                "typeString": "mapping(uint8 => mapping(bytes32 => uint256))"
              },
              "valueType": {
                "id": 16211,
                "keyType": {
                  "id": 16209,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "628:7:81",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "nodeType": "Mapping",
                "src": "620:27:81",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                  "typeString": "mapping(bytes32 => uint256)"
                },
                "valueType": {
                  "id": 16210,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "639:7:81",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "id": 16217,
            "name": "FeeChanged",
            "nameLocation": "692:10:81",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 16216,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16215,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newFee",
                  "nameLocation": "720:6:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16217,
                  "src": "712:14:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16214,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "712:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "702:30:81"
            },
            "src": "686:47:81"
          },
          {
            "id": 16221,
            "name": "IncorrectFeeSupplied",
            "nameLocation": "745:20:81",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 16220,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16219,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 16221,
                  "src": "766:7:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16218,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "766:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "765:9:81"
            },
            "src": "739:36:81"
          },
          {
            "body": {
              "id": 16233,
              "nodeType": "Block",
              "src": "802:110:81",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 16225,
                            "name": "DEFAULT_ADMIN_ROLE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18344,
                            "src": "828:18:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "expression": {
                              "id": 16226,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "848:3:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 16227,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "848:10:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 16224,
                          "name": "hasRole",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18381,
                          "src": "820:7:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (bytes32,address) view returns (bool)"
                          }
                        },
                        "id": 16228,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "820:39:81",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "73656e64657220646f65736e277420686176652061646d696e20726f6c65",
                        "id": 16229,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "861:32:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cccb3b305edc7308d7027b1001041a46b235f7d3213d690bb469676069d9b205",
                          "typeString": "literal_string \"sender doesn't have admin role\""
                        },
                        "value": "sender doesn't have admin role"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cccb3b305edc7308d7027b1001041a46b235f7d3213d690bb469676069d9b205",
                          "typeString": "literal_string \"sender doesn't have admin role\""
                        }
                      ],
                      "id": 16223,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "812:7:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16230,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "812:82:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16231,
                  "nodeType": "ExpressionStatement",
                  "src": "812:82:81"
                },
                {
                  "id": 16232,
                  "nodeType": "PlaceholderStatement",
                  "src": "904:1:81"
                }
              ]
            },
            "id": 16234,
            "name": "onlyAdmin",
            "nameLocation": "790:9:81",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 16222,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "799:2:81"
            },
            "src": "781:131:81",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 16240,
              "nodeType": "Block",
              "src": "948:49:81",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 16236,
                      "name": "_onlyBridgeOrRouter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16258,
                      "src": "958:19:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$__$",
                        "typeString": "function () view"
                      }
                    },
                    "id": 16237,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "958:21:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16238,
                  "nodeType": "ExpressionStatement",
                  "src": "958:21:81"
                },
                {
                  "id": 16239,
                  "nodeType": "PlaceholderStatement",
                  "src": "989:1:81"
                }
              ]
            },
            "id": 16241,
            "name": "onlyBridgeOrRouter",
            "nameLocation": "927:18:81",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 16235,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "945:2:81"
            },
            "src": "918:79:81",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 16257,
              "nodeType": "Block",
              "src": "1047:178:81",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 16253,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 16248,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 16245,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "1078:3:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 16246,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "1078:10:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 16247,
                            "name": "_bridgeAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16205,
                            "src": "1092:14:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1078:28:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 16252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 16249,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "1110:3:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 16250,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "1110:10:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 16251,
                            "name": "_feeHandlerRouterAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16207,
                            "src": "1124:24:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1110:38:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1078:70:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "73656e646572206d75737420626520627269646765206f722066656520726f7574657220636f6e7472616374",
                        "id": 16254,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1162:46:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0e421896d469e70aea183401bab489f45e95ec1e32ec153a2e00f0f7d7b945ab",
                          "typeString": "literal_string \"sender must be bridge or fee router contract\""
                        },
                        "value": "sender must be bridge or fee router contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0e421896d469e70aea183401bab489f45e95ec1e32ec153a2e00f0f7d7b945ab",
                          "typeString": "literal_string \"sender must be bridge or fee router contract\""
                        }
                      ],
                      "id": 16244,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1057:7:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1057:161:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16256,
                  "nodeType": "ExpressionStatement",
                  "src": "1057:161:81"
                }
              ]
            },
            "id": 16258,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_onlyBridgeOrRouter",
            "nameLocation": "1012:19:81",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16242,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1031:2:81"
            },
            "returnParameters": {
              "id": 16243,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1047:0:81"
            },
            "scope": 16514,
            "src": "1003:222:81",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 16280,
              "nodeType": "Block",
              "src": "1489:159:81",
              "statements": [
                {
                  "expression": {
                    "id": 16268,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 16266,
                      "name": "_bridgeAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16205,
                      "src": "1499:14:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 16267,
                      "name": "bridgeAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16261,
                      "src": "1516:13:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1499:30:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 16269,
                  "nodeType": "ExpressionStatement",
                  "src": "1499:30:81"
                },
                {
                  "expression": {
                    "id": 16272,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 16270,
                      "name": "_feeHandlerRouterAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16207,
                      "src": "1539:24:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 16271,
                      "name": "feeHandlerRouterAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16263,
                      "src": "1566:23:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1539:50:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 16273,
                  "nodeType": "ExpressionStatement",
                  "src": "1539:50:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 16275,
                        "name": "DEFAULT_ADMIN_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18344,
                        "src": "1610:18:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "expression": {
                          "id": 16276,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "1630:3:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 16277,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1630:10:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 16274,
                      "name": "_setupRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18547,
                      "src": "1599:10:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 16278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1599:42:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16279,
                  "nodeType": "ExpressionStatement",
                  "src": "1599:42:81"
                }
              ]
            },
            "documentation": {
              "id": 16259,
              "nodeType": "StructuredDocumentation",
              "src": "1231:185:81",
              "text": "@param bridgeAddress Contract address of previously deployed Bridge.\n@param feeHandlerRouterAddress Contract address of previously deployed FeeHandlerRouter."
            },
            "id": 16281,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16264,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16261,
                  "mutability": "mutable",
                  "name": "bridgeAddress",
                  "nameLocation": "1441:13:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16281,
                  "src": "1433:21:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16260,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1433:7:81",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16263,
                  "mutability": "mutable",
                  "name": "feeHandlerRouterAddress",
                  "nameLocation": "1464:23:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16281,
                  "src": "1456:31:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16262,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1456:7:81",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1432:56:81"
            },
            "returnParameters": {
              "id": 16265,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1489:0:81"
            },
            "scope": 16514,
            "src": "1421:227:81",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              18264
            ],
            "body": {
              "id": 16290,
              "nodeType": "Block",
              "src": "1802:31:81",
              "statements": [
                {
                  "expression": {
                    "hexValue": "6261736963",
                    "id": 16288,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1819:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_a542bebe0be4ee37844e1023969dcdf99c908139f19a527065ff05d1a0ac2e34",
                      "typeString": "literal_string \"basic\""
                    },
                    "value": "basic"
                  },
                  "functionReturnParameters": 16287,
                  "id": 16289,
                  "nodeType": "Return",
                  "src": "1812:14:81"
                }
              ]
            },
            "documentation": {
              "id": 16282,
              "nodeType": "StructuredDocumentation",
              "src": "1654:64:81",
              "text": "@notice Getter function for fee handler type"
            },
            "functionSelector": "542774b5",
            "id": 16291,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "feeHandlerType",
            "nameLocation": "1732:14:81",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 16284,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1764:8:81"
            },
            "parameters": {
              "id": 16283,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1746:2:81"
            },
            "returnParameters": {
              "id": 16287,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16286,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 16291,
                  "src": "1787:13:81",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 16285,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1787:6:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1786:15:81"
            },
            "scope": 16514,
            "src": "1723:110:81",
            "stateMutability": "pure",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 16319,
              "nodeType": "Block",
              "src": "2136:209:81",
              "statements": [
                {
                  "assignments": [
                    16298
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16298,
                      "mutability": "mutable",
                      "name": "sender",
                      "nameLocation": "2154:6:81",
                      "nodeType": "VariableDeclaration",
                      "scope": 16319,
                      "src": "2146:14:81",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 16297,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2146:7:81",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16301,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 16299,
                      "name": "_msgSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5295,
                      "src": "2163:10:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 16300,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2163:12:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2146:29:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 16305,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 16303,
                          "name": "sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16298,
                          "src": "2193:6:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "id": 16304,
                          "name": "newAdmin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16294,
                          "src": "2203:8:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2193:18:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "43616e6e6f742072656e6f756e6365206f6e6573656c66",
                        "id": 16306,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2213:25:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ab1c5f98bafd089c448d0f437f7951a06dfd484be68434b4420ed4d39647c206",
                          "typeString": "literal_string \"Cannot renounce oneself\""
                        },
                        "value": "Cannot renounce oneself"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ab1c5f98bafd089c448d0f437f7951a06dfd484be68434b4420ed4d39647c206",
                          "typeString": "literal_string \"Cannot renounce oneself\""
                        }
                      ],
                      "id": 16302,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2185:7:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2185:54:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16308,
                  "nodeType": "ExpressionStatement",
                  "src": "2185:54:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 16310,
                        "name": "DEFAULT_ADMIN_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18344,
                        "src": "2259:18:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 16311,
                        "name": "newAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16294,
                        "src": "2279:8:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 16309,
                      "name": "grantRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18485,
                      "src": "2249:9:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 16312,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2249:39:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16313,
                  "nodeType": "ExpressionStatement",
                  "src": "2249:39:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 16315,
                        "name": "DEFAULT_ADMIN_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18344,
                        "src": "2311:18:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 16316,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16298,
                        "src": "2331:6:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 16314,
                      "name": "renounceRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18533,
                      "src": "2298:12:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 16317,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2298:40:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16318,
                  "nodeType": "ExpressionStatement",
                  "src": "2298:40:81"
                }
              ]
            },
            "documentation": {
              "id": 16292,
              "nodeType": "StructuredDocumentation",
              "src": "1839:242:81",
              "text": "@notice Removes admin role from {_msgSender()} and grants it to {newAdmin}.\n@notice Only callable by an address that currently has the admin role.\n@param newAdmin Address that admin role will be granted to."
            },
            "functionSelector": "5e1fab0f",
            "id": 16320,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "renounceAdmin",
            "nameLocation": "2095:13:81",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16295,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16294,
                  "mutability": "mutable",
                  "name": "newAdmin",
                  "nameLocation": "2117:8:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16320,
                  "src": "2109:16:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16293,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2109:7:81",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2108:18:81"
            },
            "returnParameters": {
              "id": 16296,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2136:0:81"
            },
            "scope": 16514,
            "src": "2086:259:81",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              18238
            ],
            "body": {
              "id": 16368,
              "nodeType": "Block",
              "src": "3000:276:81",
              "statements": [
                {
                  "assignments": [
                    16339
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16339,
                      "mutability": "mutable",
                      "name": "currentFee",
                      "nameLocation": "3018:10:81",
                      "nodeType": "VariableDeclaration",
                      "scope": 16368,
                      "src": "3010:18:81",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 16338,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3010:7:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16345,
                  "initialValue": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 16340,
                        "name": "_domainResourceIDToFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16213,
                        "src": "3031:22:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
                          "typeString": "mapping(uint8 => mapping(bytes32 => uint256))"
                        }
                      },
                      "id": 16342,
                      "indexExpression": {
                        "id": 16341,
                        "name": "destinationDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16327,
                        "src": "3054:19:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3031:43:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                        "typeString": "mapping(bytes32 => uint256)"
                      }
                    },
                    "id": 16344,
                    "indexExpression": {
                      "id": 16343,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16329,
                      "src": "3075:10:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3031:55:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3010:76:81"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 16349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 16346,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967281,
                        "src": "3100:3:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 16347,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "src": "3100:9:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "id": 16348,
                      "name": "currentFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16339,
                      "src": "3113:10:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3100:23:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 16355,
                  "nodeType": "IfStatement",
                  "src": "3096:67:81",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 16351,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967281,
                            "src": "3153:3:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 16352,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "src": "3153:9:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 16350,
                        "name": "IncorrectFeeSupplied",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16221,
                        "src": "3132:20:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$__$",
                          "typeString": "function (uint256) pure"
                        }
                      },
                      "id": 16353,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3132:31:81",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 16354,
                    "nodeType": "RevertStatement",
                    "src": "3125:38:81"
                  }
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 16357,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16323,
                        "src": "3191:6:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 16358,
                        "name": "fromDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16325,
                        "src": "3199:12:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 16359,
                        "name": "destinationDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16327,
                        "src": "3213:19:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 16360,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16329,
                        "src": "3234:10:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 16361,
                        "name": "currentFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16339,
                        "src": "3246:10:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 16364,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3266:1:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 16363,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3258:7:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 16362,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3258:7:81",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 16365,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3258:10:81",
                        "tryCall": false,
                        "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": 16356,
                      "name": "FeeCollected",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18213,
                      "src": "3178:12:81",
                      "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": 16366,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3178:91:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16367,
                  "nodeType": "EmitStatement",
                  "src": "3173:96:81"
                }
              ]
            },
            "documentation": {
              "id": 16321,
              "nodeType": "StructuredDocumentation",
              "src": "2351:445:81",
              "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 to be passed to specified handler.\n@param feeData Additional data to be passed to the fee handler."
            },
            "functionSelector": "25307065",
            "id": 16369,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 16336,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 16335,
                  "name": "onlyBridgeOrRouter",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 16241,
                  "src": "2981:18:81"
                },
                "nodeType": "ModifierInvocation",
                "src": "2981:18:81"
              }
            ],
            "name": "collectFee",
            "nameLocation": "2810:10:81",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16334,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16323,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "2829:6:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16369,
                  "src": "2821:14:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16322,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2821:7:81",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16325,
                  "mutability": "mutable",
                  "name": "fromDomainID",
                  "nameLocation": "2843:12:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16369,
                  "src": "2837:18:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16324,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2837:5:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16327,
                  "mutability": "mutable",
                  "name": "destinationDomainID",
                  "nameLocation": "2863:19:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16369,
                  "src": "2857:25:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16326,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2857:5:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16329,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "2892:10:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16369,
                  "src": "2884:18:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 16328,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2884:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16331,
                  "mutability": "mutable",
                  "name": "depositData",
                  "nameLocation": "2919:11:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16369,
                  "src": "2904:26:81",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16330,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2904:5:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16333,
                  "mutability": "mutable",
                  "name": "feeData",
                  "nameLocation": "2947:7:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16369,
                  "src": "2932:22:81",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16332,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2932:5:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2820:135:81"
            },
            "returnParameters": {
              "id": 16337,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3000:0:81"
            },
            "scope": 16514,
            "src": "2801:475:81",
            "stateMutability": "payable",
            "virtual": true,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              18258
            ],
            "body": {
              "id": 16400,
              "nodeType": "Block",
              "src": "3980:93:81",
              "statements": [
                {
                  "expression": {
                    "components": [
                      {
                        "baseExpression": {
                          "baseExpression": {
                            "id": 16389,
                            "name": "_domainResourceIDToFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16213,
                            "src": "3998:22:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
                              "typeString": "mapping(uint8 => mapping(bytes32 => uint256))"
                            }
                          },
                          "id": 16391,
                          "indexExpression": {
                            "id": 16390,
                            "name": "destinationDomainID",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16376,
                            "src": "4021:19:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3998:43:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                            "typeString": "mapping(bytes32 => uint256)"
                          }
                        },
                        "id": 16393,
                        "indexExpression": {
                          "id": 16392,
                          "name": "resourceID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16378,
                          "src": "4042:10:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3998:55:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 16396,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4063:1:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 16395,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4055:7:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 16394,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4055:7:81",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 16397,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4055:10:81",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "id": 16398,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3997:69:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_address_$",
                      "typeString": "tuple(uint256,address)"
                    }
                  },
                  "functionReturnParameters": 16388,
                  "id": 16399,
                  "nodeType": "Return",
                  "src": "3990:76:81"
                }
              ]
            },
            "documentation": {
              "id": 16370,
              "nodeType": "StructuredDocumentation",
              "src": "3282:487:81",
              "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 to be passed to specified handler.\n@param feeData Additional data to be passed to the fee handler.\n@return Returns the fee amount."
            },
            "functionSelector": "ef4f081f",
            "id": 16401,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateFee",
            "nameLocation": "3783:12:81",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16383,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16372,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "3804:6:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16401,
                  "src": "3796:14:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16371,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3796:7:81",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16374,
                  "mutability": "mutable",
                  "name": "fromDomainID",
                  "nameLocation": "3818:12:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16401,
                  "src": "3812:18:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16373,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3812:5:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16376,
                  "mutability": "mutable",
                  "name": "destinationDomainID",
                  "nameLocation": "3838:19:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16401,
                  "src": "3832:25:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16375,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3832:5:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16378,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "3867:10:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16401,
                  "src": "3859:18:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 16377,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3859:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16380,
                  "mutability": "mutable",
                  "name": "depositData",
                  "nameLocation": "3894:11:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16401,
                  "src": "3879:26:81",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16379,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3879:5:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16382,
                  "mutability": "mutable",
                  "name": "feeData",
                  "nameLocation": "3922:7:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16401,
                  "src": "3907:22:81",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 16381,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3907:5:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3795:135:81"
            },
            "returnParameters": {
              "id": 16388,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16385,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 16401,
                  "src": "3962:7:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16384,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3962:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16387,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 16401,
                  "src": "3971:7:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 16386,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3971:7:81",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3961:18:81"
            },
            "scope": 16514,
            "src": "3774:299:81",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "external"
          },
          {
            "body": {
              "id": 16440,
              "nodeType": "Block",
              "src": "4585:274:81",
              "statements": [
                {
                  "assignments": [
                    16414
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 16414,
                      "mutability": "mutable",
                      "name": "currentFee",
                      "nameLocation": "4603:10:81",
                      "nodeType": "VariableDeclaration",
                      "scope": 16440,
                      "src": "4595:18:81",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 16413,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4595:7:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 16420,
                  "initialValue": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 16415,
                        "name": "_domainResourceIDToFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16213,
                        "src": "4616:22:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
                          "typeString": "mapping(uint8 => mapping(bytes32 => uint256))"
                        }
                      },
                      "id": 16417,
                      "indexExpression": {
                        "id": 16416,
                        "name": "destinationDomainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16404,
                        "src": "4639:19:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "4616:43:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                        "typeString": "mapping(bytes32 => uint256)"
                      }
                    },
                    "id": 16419,
                    "indexExpression": {
                      "id": 16418,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16406,
                      "src": "4660:10:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4616:55:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4595:76:81"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 16424,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 16422,
                          "name": "currentFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16414,
                          "src": "4689:10:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "id": 16423,
                          "name": "newFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16408,
                          "src": "4703:6:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4689:20:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "43757272656e742066656520697320657175616c20746f206e657720666565",
                        "id": 16425,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4711:33:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_db095f13e245243418ee9a5b7ae0408e2f6a2092be336cf2ec7b5f2ae85b9133",
                          "typeString": "literal_string \"Current fee is equal to new fee\""
                        },
                        "value": "Current fee is equal to new fee"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_db095f13e245243418ee9a5b7ae0408e2f6a2092be336cf2ec7b5f2ae85b9133",
                          "typeString": "literal_string \"Current fee is equal to new fee\""
                        }
                      ],
                      "id": 16421,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "4681:7:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4681:64:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16427,
                  "nodeType": "ExpressionStatement",
                  "src": "4681:64:81"
                },
                {
                  "expression": {
                    "id": 16434,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 16428,
                          "name": "_domainResourceIDToFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16213,
                          "src": "4755:22:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_mapping$_t_bytes32_$_t_uint256_$_$",
                            "typeString": "mapping(uint8 => mapping(bytes32 => uint256))"
                          }
                        },
                        "id": 16431,
                        "indexExpression": {
                          "id": 16429,
                          "name": "destinationDomainID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16404,
                          "src": "4778:19:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4755:43:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                          "typeString": "mapping(bytes32 => uint256)"
                        }
                      },
                      "id": 16432,
                      "indexExpression": {
                        "id": 16430,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16406,
                        "src": "4799:10:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4755:55:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 16433,
                      "name": "newFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16408,
                      "src": "4813:6:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4755:64:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 16435,
                  "nodeType": "ExpressionStatement",
                  "src": "4755:64:81"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 16437,
                        "name": "newFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16408,
                        "src": "4845:6:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 16436,
                      "name": "FeeChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16217,
                      "src": "4834:10:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 16438,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4834:18:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16439,
                  "nodeType": "EmitStatement",
                  "src": "4829:23:81"
                }
              ]
            },
            "documentation": {
              "id": 16402,
              "nodeType": "StructuredDocumentation",
              "src": "4079:400:81",
              "text": "@notice Maps the {newFee} to {destinationDomainID} to {resourceID} in {_domainResourceIDToFee}.\n@notice Only callable by admin.\n@param destinationDomainID ID of chain fee will be set.\n@param resourceID ResourceID for which fee will be set.\n@param newFee Value to which fee will be updated to for the provided {destinationDomainID} and {resourceID}."
            },
            "functionSelector": "abc9db0b",
            "id": 16441,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 16411,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 16410,
                  "name": "onlyAdmin",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 16234,
                  "src": "4575:9:81"
                },
                "nodeType": "ModifierInvocation",
                "src": "4575:9:81"
              }
            ],
            "name": "changeFee",
            "nameLocation": "4493:9:81",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16409,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16404,
                  "mutability": "mutable",
                  "name": "destinationDomainID",
                  "nameLocation": "4509:19:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16441,
                  "src": "4503:25:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 16403,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "4503:5:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16406,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "4538:10:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16441,
                  "src": "4530:18:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 16405,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4530:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16408,
                  "mutability": "mutable",
                  "name": "newFee",
                  "nameLocation": "4558:6:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16441,
                  "src": "4550:14:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 16407,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4550:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4502:63:81"
            },
            "returnParameters": {
              "id": 16412,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4585:0:81"
            },
            "scope": 16514,
            "src": "4484:375:81",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 16512,
              "nodeType": "Block",
              "src": "5348:386:81",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 16458,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 16454,
                            "name": "addrs",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16445,
                            "src": "5366:5:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                              "typeString": "address payable[] calldata"
                            }
                          },
                          "id": 16455,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "5366:12:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 16456,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16448,
                            "src": "5382:7:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 16457,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "5382:14:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5366:30:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "61646472735b5d2c20616d6f756e74735b5d3a2064696666206c656e677468",
                        "id": 16459,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5398:33:81",
                        "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": 16453,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5358:7:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 16460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5358:74:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 16461,
                  "nodeType": "ExpressionStatement",
                  "src": "5358:74:81"
                },
                {
                  "body": {
                    "id": 16510,
                    "nodeType": "Block",
                    "src": "5485:243:81",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "baseExpression": {
                                "id": 16473,
                                "name": "addrs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16445,
                                "src": "5499:5:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                                  "typeString": "address payable[] calldata"
                                }
                              },
                              "id": 16475,
                              "indexExpression": {
                                "id": 16474,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16463,
                                "src": "5505:1:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5499:8:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "id": 16476,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mustNotBeZero",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 19136,
                            "src": "5499:22:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_address_$bound_to$_t_address_$",
                              "typeString": "function (address) pure returns (address)"
                            }
                          },
                          "id": 16477,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5499:24:81",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 16478,
                        "nodeType": "ExpressionStatement",
                        "src": "5499:24:81"
                      },
                      {
                        "assignments": [
                          16480,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 16480,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "5543:7:81",
                            "nodeType": "VariableDeclaration",
                            "scope": 16510,
                            "src": "5538:12:81",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 16479,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "5538:4:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 16491,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "",
                              "id": 16489,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5588:2:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                  "typeString": "literal_string \"\""
                                }
                              ],
                              "expression": {
                                "baseExpression": {
                                  "id": 16481,
                                  "name": "addrs",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16445,
                                  "src": "5555:5:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                                    "typeString": "address payable[] calldata"
                                  }
                                },
                                "id": 16483,
                                "indexExpression": {
                                  "id": 16482,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16463,
                                  "src": "5561:1:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "5555:8:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "id": 16484,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "src": "5555:13:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 16488,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "baseExpression": {
                                  "id": 16485,
                                  "name": "amounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16448,
                                  "src": "5576:7:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                    "typeString": "uint256[] calldata"
                                  }
                                },
                                "id": 16487,
                                "indexExpression": {
                                  "id": 16486,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 16463,
                                  "src": "5584:1:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "5576:10:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "5555:32:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 16490,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5555:36:81",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5537:54:81"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 16493,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16480,
                              "src": "5613:7:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "466565206574686572207472616e73666572206661696c6564",
                              "id": 16494,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5622:27:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c83ea8d31d5b2432d5661a262a1c8abcb30052289f0faa441155730eeab43e0a",
                                "typeString": "literal_string \"Fee ether transfer failed\""
                              },
                              "value": "Fee ether transfer failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c83ea8d31d5b2432d5661a262a1c8abcb30052289f0faa441155730eeab43e0a",
                                "typeString": "literal_string \"Fee ether transfer failed\""
                              }
                            ],
                            "id": 16492,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "5605:7:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 16495,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5605:45:81",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 16496,
                        "nodeType": "ExpressionStatement",
                        "src": "5605:45:81"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 16500,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5692:1:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 16499,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5684:7:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 16498,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5684:7:81",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 16501,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5684:10:81",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 16502,
                                "name": "addrs",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16445,
                                "src": "5696:5:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                                  "typeString": "address payable[] calldata"
                                }
                              },
                              "id": 16504,
                              "indexExpression": {
                                "id": 16503,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16463,
                                "src": "5702:1:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5696:8:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 16505,
                                "name": "amounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16448,
                                "src": "5706:7:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 16507,
                              "indexExpression": {
                                "id": 16506,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 16463,
                                "src": "5714:1:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5706:10:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 16497,
                            "name": "FeeDistributed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18222,
                            "src": "5669:14:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 16508,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5669:48:81",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 16509,
                        "nodeType": "EmitStatement",
                        "src": "5664:53:81"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 16469,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 16466,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16463,
                      "src": "5462:1:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 16467,
                        "name": "addrs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16445,
                        "src": "5466:5:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                          "typeString": "address payable[] calldata"
                        }
                      },
                      "id": 16468,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "5466:12:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5462:16:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 16511,
                  "initializationExpression": {
                    "assignments": [
                      16463
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 16463,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "5455:1:81",
                        "nodeType": "VariableDeclaration",
                        "scope": 16511,
                        "src": "5447:9:81",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 16462,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5447:7:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 16465,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 16464,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5459:1:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "5447:13:81"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 16471,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "5480:3:81",
                      "subExpression": {
                        "id": 16470,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16463,
                        "src": "5480:1:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 16472,
                    "nodeType": "ExpressionStatement",
                    "src": "5480:3:81"
                  },
                  "nodeType": "ForStatement",
                  "src": "5442:286:81"
                }
              ]
            },
            "documentation": {
              "id": 16442,
              "nodeType": "StructuredDocumentation",
              "src": "4865:379:81",
              "text": "@notice Transfers eth in 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 (in WEI) from amounts at index 0.\n@param addrs Array of addresses to transfer {amounts} to.\n@param amounts Array of amounts to transfer to {addrs}."
            },
            "functionSelector": "904e9b2b",
            "id": 16513,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 16451,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 16450,
                  "name": "onlyAdmin",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 16234,
                  "src": "5338:9:81"
                },
                "nodeType": "ModifierInvocation",
                "src": "5338:9:81"
              }
            ],
            "name": "transferFee",
            "nameLocation": "5258:11:81",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 16449,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 16445,
                  "mutability": "mutable",
                  "name": "addrs",
                  "nameLocation": "5297:5:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16513,
                  "src": "5270:32:81",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_payable_$dyn_calldata_ptr",
                    "typeString": "address payable[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 16443,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "5270:15:81",
                      "stateMutability": "payable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "id": 16444,
                    "nodeType": "ArrayTypeName",
                    "src": "5270:17:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$dyn_storage_ptr",
                      "typeString": "address payable[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 16448,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nameLocation": "5320:7:81",
                  "nodeType": "VariableDeclaration",
                  "scope": 16513,
                  "src": "5304:23:81",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 16446,
                      "name": "uint",
                      "nodeType": "ElementaryTypeName",
                      "src": "5304:4:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 16447,
                    "nodeType": "ArrayTypeName",
                    "src": "5304:6:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5269:59:81"
            },
            "returnParameters": {
              "id": 16452,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5348:0:81"
            },
            "scope": 16514,
            "src": "5249:485:81",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 16515,
        "src": "410:5326:81",
        "usedErrors": [
          16221,
          19110
        ]
      }
    ],
    "src": "81:5656:81"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.11+commit.d7f03943.Emscripten.clang"
  },
  "networks": {
    "1727170272871": {
      "events": {
        "0x6bbc57480a46553fa4d156ce702beef5f3ad66303b0ed1a5d4cb44966c6584c3": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "newFee",
              "type": "uint256"
            }
          ],
          "name": "FeeChanged",
          "type": "event"
        },
        "0xbd231b7fa4103e15e7a238c72f07e8aff310701af121895aa6c793b80245e433": {
          "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"
        },
        "0xaaa40a232aaf133fdd28f3485f6fdd163514cfadbffa981f3610f42398efe34b": {
          "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"
        },
        "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d": {
          "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"
        },
        "0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b": {
          "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"
        }
      },
      "links": {},
      "address": "0x8dA96a8C2b2d3e5ae7e668d0C94393aa8D5D3B94",
      "transactionHash": "0x1b23514c9aff2507614c85ea94aae98a01de818237c05fc417cabb654a1b5feb"
    },
    "1727170313921": {
      "events": {
        "0x6bbc57480a46553fa4d156ce702beef5f3ad66303b0ed1a5d4cb44966c6584c3": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "newFee",
              "type": "uint256"
            }
          ],
          "name": "FeeChanged",
          "type": "event"
        },
        "0xbd231b7fa4103e15e7a238c72f07e8aff310701af121895aa6c793b80245e433": {
          "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"
        },
        "0xaaa40a232aaf133fdd28f3485f6fdd163514cfadbffa981f3610f42398efe34b": {
          "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"
        },
        "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d": {
          "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"
        },
        "0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b": {
          "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"
        }
      },
      "links": {},
      "address": "0x8dA96a8C2b2d3e5ae7e668d0C94393aa8D5D3B94",
      "transactionHash": "0x0e05ef5a10a4b939906884acc6ce72d0fdc17d01e421b28c16605c389fc075c5"
    }
  },
  "schemaVersion": "3.4.6",
  "updatedAt": "2024-09-24T09:32:14.807Z",
  "networkType": "ethereum",
  "devdoc": {
    "author": "ChainSafe Systems.",
    "kind": "dev",
    "methods": {
      "calculateFee(address,uint8,uint8,bytes32,bytes,bytes)": {
        "params": {
          "depositData": "Additional data to be passed to specified handler.",
          "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": {
          "_0": "Returns the fee amount."
        }
      },
      "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."
        }
      },
      "collectFee(address,uint8,uint8,bytes32,bytes,bytes)": {
        "params": {
          "depositData": "Additional data to be passed to specified handler.",
          "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."
      },
      "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."
      },
      "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."
      },
      "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
  }
}