{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_bridgeRouter",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "ProcessFailure",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "affectedAssets",
      "outputs": [
        {
          "internalType": "address payable[14]",
          "name": "",
          "type": "address[14]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "baseURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bridgeRouter",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_asset",
          "type": "address"
        }
      ],
      "name": "isAffectedAsset",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nextID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_asset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "record",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "records",
      "outputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "amount",
          "type": "uint96"
        },
        {
          "internalType": "address",
          "name": "originalUser",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "recovered",
          "type": "uint96"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenOfOwnerByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "totalAffected",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "totalMinted",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60a060405234801561001057600080fd5b5060405161353c38038061353c8339818101604052602081101561003357600080fd5b5051606081901b6001600160601b0319166080526001600160a01b03166134d061006c60003980610a665280610bbb52506134d06000f3fe608060405234801561001057600080fd5b50600436106101ce5760003560e01c80636352211e116101045780638da5cb5b116100a2578063c87b56dd11610071578063c87b56dd146106c3578063e271f8e3146106e0578063e985e9c514610713578063f2fde38b1461074e576101ce565b80638da5cb5b146105a557806395d89b41146105ad578063a22cb465146105b5578063b88d4fde146105f0576101ce565b80637013ca26116100de5780637013ca261461052157806370a0823114610562578063715018a6146105955780638129fc1c1461059d576101ce565b80636352211e146104c95780636c0360eb146104e65780636c267633146104ee576101ce565b80631e96917d11610171578063344610671161014b578063344610671461043857806341af5b52146104a457806342842e0e146103bc5780634f6ccce7146104ac576101ce565b80631e96917d146103b457806323b872dd146103bc5780632f745c59146103ff576101ce565b8063081812fc116101ad578063081812fc146102e8578063095ea7b31461032e578063172a93fb1461036957806318160ddd146103ac576101ce565b80623d4790146101d357806301ffc9a71461021857806306fdde031461026b575b600080fd5b610206600480360360208110156101e957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610781565b60408051918252519081900360200190f35b6102576004803603602081101561022e57600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610793565b604080519115158252519081900360200190f35b6102736107ce565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102ad578181015183820152602001610295565b50505050905090810190601f1680156102da5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610305600480360360208110156102fe57600080fd5b5035610882565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103676004803603604081101561034457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561090b565b005b6103676004803603606081101561037f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610a4e565b610206610afd565b610206610b0e565b610367600480360360608110156103d257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610b14565b6102066004803603604081101561041557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610b1c565b6104556004803603602081101561044e57600080fd5b5035610b54565b6040805173ffffffffffffffffffffffffffffffffffffffff95861681526bffffffffffffffffffffffff94851660208201529290941682850152909116606082015290519081900360800190f35b610305610bb9565b610206600480360360208110156104c257600080fd5b5035610bdd565b610305600480360360208110156104df57600080fd5b5035610bf3565b610273610c1b565b6102576004803603602081101561050457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c9a565b610529610cc4565b60405180826101c080838360005b8381101561054f578181015183820152602001610537565b5050505090500191505060405180910390f35b6102066004803603602081101561057857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610e4c565b610367610ee8565b610367610fff565b6103056111d5565b6102736111f1565b610367600480360360408110156105cb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515611270565b6103676004803603608081101561060657600080fd5b73ffffffffffffffffffffffffffffffffffffffff82358116926020810135909116916040820135919081019060808101606082013564010000000081111561064e57600080fd5b82018360208201111561066057600080fd5b8035906020019184600183028401116401000000008311171561068257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506113e1945050505050565b610273600480360360208110156106d957600080fd5b50356113ef565b610206600480360360208110156106f657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661175c565b6102576004803603604081101561072957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661176e565b6103676004803603602081101561076457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166117a9565b60fd6020526000908152604090205481565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526065602052604090205460ff165b919050565b609c8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108785780601f1061084d57610100808354040283529160200191610878565b820191906000526020600020905b81548152906001019060200180831161085b57829003601f168201915b5050505050905090565b600061088d8261194b565b6108e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613448602c913960400191505060405180910390fd5b506000908152609a602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061091682610bf3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561099d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806134a36021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109bc611958565b73ffffffffffffffffffffffffffffffffffffffff1614806109ea57506109ea816109e5611958565b61176e565b610a3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603881526020018061336d6038913960400191505060405180910390fd5b610a49838361195c565b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610af257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6f6e6c7920427269646765526f75746572000000000000000000000000000000604482015290519081900360640190fd5b610a498383836119fc565b6000610b096098611b98565b905090565b60fb5481565b610a49611ba3565b73ffffffffffffffffffffffffffffffffffffffff82166000908152609760205260408120610b4b9083611c0a565b90505b92915050565b60fc602052600090815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff808316926bffffffffffffffffffffffff740100000000000000000000000000000000000000009182900481169392831692919091041684565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080610beb609884611c16565b509392505050565b6000610b4e826040518060600160405280602981526020016133cf6029913960989190611c32565b609f8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108785780601f1061084d57610100808354040283529160200191610878565b73ffffffffffffffffffffffffffffffffffffffff16600090815260208190526040902054151590565b610ccc61320c565b50604080516101c081018252732260fac5e5542a773aa44fbcfedf7c193bc2c599815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2602082015273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489181019190915273853d955acef822db058eb8505911ed77f175b99e606082015273dac17f958d2ee523a2206206994597c13d831ec76080820152736b175474e89094c44da98b954eedeac495271d0f60a082015273d417144312dbf50465b1c641d016962017ef624060c0820152733d6f0dea3ac3c607b3998e6ce14b6350721752d960e08201527340eb746dee876ac1e78697b7ca85142d178a1fc861010082015273f1a91c7d44768070f711c68f33a7ca25c8d30268610120820152733432b6a60d23ca0dfca7761b7ab56459d9c964d0610140820152733431f91b3a388115f00c5ba9fdb899851d005fb561016082015273e5097d9baeafb89f9bcb78c9290d545db5f9e9cb61018082015273f1dc500fde233a4055e25e5bbf516372bc4f68716101a082015290565b600073ffffffffffffffffffffffffffffffffffffffff8216610eba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806133a5602a913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152609760205260409020610b4e90611b98565b610ef0611958565b73ffffffffffffffffffffffffffffffffffffffff16610f0e6111d5565b73ffffffffffffffffffffffffffffffffffffffff1614610f9057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60c95460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360c980547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b603254610100900460ff16806110185750611018611c49565b80611026575060325460ff16155b61107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806133f8602e913960400191505060405180910390fd5b603254610100900460ff161580156110e157603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6110e9611c5a565b61115d6040518060400160405280600981526020017f4e6f6d6164204e465400000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f6e6f4e4654000000000000000000000000000000000000000000000000000000815250611eeb565b61119b6040518060400160405280601681526020017f68747470733a2f2f6e66742e6e6f6d61642e78797a2f0000000000000000000081525061201a565b6111a3612031565b80156111d257603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60c95473ffffffffffffffffffffffffffffffffffffffff1690565b609d8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108785780601f1061084d57610100808354040283529160200191610878565b611278611958565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561131257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b80609b600061131f611958565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169215159290921790915561138e611958565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6113e9611ba3565b50505050565b60606113fa8261194b565b61144f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613474602f913960400191505060405180910390fd5b6000828152609e602090815260408083208054825160026001831615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190921691909104601f8101859004850282018501909352828152929091908301828280156115005780601f106114d557610100808354040283529160200191611500565b820191906000526020600020905b8154815290600101906020018083116114e357829003601f168201915b505050505090506000611511610c1b565b9050805160001415611525575090506107c9565b8151156116405780826040516020018083805190602001908083835b6020831061157e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611541565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905285519190930192850191508083835b6020831061160257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115c5565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052925050506107c9565b8061164a85612123565b6040516020018083805190602001908083835b6020831061169a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161165d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905285519190930192850191508083835b6020831061171e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016116e1565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b60006020819052908152604090205481565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152609b6020908152604080832093909416825291909152205460ff1690565b6117b1611958565b73ffffffffffffffffffffffffffffffffffffffff166117cf6111d5565b73ffffffffffffffffffffffffffffffffffffffff161461185157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806133216026913960400191505060405180910390fd5b60c95460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000610b4e609883612250565b3390565b6000818152609a6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915581906119b682610bf3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60fb805460018101909155611a11838261225c565b600081815260fc6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8a81169182178116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8b160217845560019093018054909216928916929092179055835260fd80835281842080548701908190558484529190932054929091521115611b2c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6f7665726d696e74000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16827f72d16d2b2c30660a6bd00c67b3674217920a01054fcd02777011805372a50c80856040518082815260200191505060405180910390a450505050565b6000610b4e82612276565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f207472616e73666572730000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610b4b838361227a565b6000808080611c2586866122f8565b9097909650945050505050565b6000611c3f84848461238d565b90505b9392505050565b6000611c5430612471565b15905090565b600060208190526417f117200f7ff0b998666205e50af945dcd5198861491334a6162cc24264d9a801634ee07ec8556904d7b58372297b8deaf97f2a11cb67ca5c7e99dba99b50e02c11472d0f19c22ed5af42a1599a7f57e1c7a455654f5aa599f7c07fc6521c8ea4247e8beb499344e591b9401fb2807ff9997dd598fd9e56c73a264d556a05873e2ff48e466ba2a59d7f27e997bcf7e34b5892c35718d72ca8a4d44f6f77265e19fe4feb6a8ebb16cc7b556507d8748182137fa934b07068f5d95a11413ed6d08a4a1122dc4b8c14a6ab2d94f8b279dac63042556a03c00b5742b19f454142857f5306b8fbe80b30a74098357ee8e26fad8dc069da9011cca5f0870a0a5982e541556a5dce3546a3de30fc55c6007f9cdb9ef8486d08aeebffa8fc9bbb85a20624c3ec8359d0fa1781366bd9aea8ad55699bf5a4d57a26c3c9d3b07f55813e084f33673b4b20bdc0331a65033a42722331e3f55a70ef815e1ddd4fb4556b01ab04465765b7c37a9b10007f65d12645f02a494bda192fbb7d0176b7df838fe8410c311663defbb56bfe7c28556a05f94e3dd1d341a8a949207fd50ff4d0ac27265152d143aec668d4c99a8fc77655d8a62125d1a4d3cd59087b55691692887ced913385b7807f541919c86040022d9e18ea6a255cd26949db2e27ffdd387787ea434611d53f44556a30a52129bcbbb1a75b6ac07f5f5fc63651242af2cb273d90cb6dd24751f30b6c885d12f328d3de3f13cba808556a09c3302fbb8195460740007f6fc1d9f3e3a05044d624fd126acdcb494d565eda599ac28936ba2e25ca06a62c5573f1dc500fde233a4055e25e5bbf516372bc4f6871905269444f9a32d89d50eec9647f9754ecc4659a29acf96c52a3094f54ed36634a7cb944ee6f2311c46b1437563355565b603254610100900460ff1680611f045750611f04611c49565b80611f12575060325460ff16155b611f67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806133f8602e913960400191505060405180910390fd5b603254610100900460ff16158015611fcd57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611fd5612477565b611fdd612589565b611fe78383612694565b8015610a4957603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b805161202d90609f90602084019061322b565b5050565b603254610100900460ff168061204a575061204a611c49565b80612058575060325460ff16155b6120ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806133f8602e913960400191505060405180910390fd5b603254610100900460ff1615801561211357603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b61211b612477565b6111a3612819565b606081612164575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526107c9565b8160005b811561217c57600101600a82049150612168565b60008167ffffffffffffffff8111801561219557600080fd5b506040519080825280601f01601f1916602001820160405280156121c0576020820181803683370190505b5085935090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b831561224757600a840660300160f81b8282806001900393508151811061220d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a840493506121ea565b50949350505050565b6000610b4b83836129a9565b61202d8282604051806020016040528060008152506129c1565b5490565b815460009082106122d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806132cd6022913960400191505060405180910390fd5b8260000182815481106122e557fe5b9060005260206000200154905092915050565b815460009081908310612356576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806134266022913960400191505060405180910390fd5b600084600001848154811061236757fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281612442576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156124075781810151838201526020016123ef565b50505050905090810190601f1680156124345780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061245557fe5b9060005260206000209060020201600101549150509392505050565b3b151590565b603254610100900460ff16806124905750612490611c49565b8061249e575060325460ff16155b6124f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806133f8602e913960400191505060405180910390fd5b603254610100900460ff161580156111a357603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9091166101001716600117905580156111d257603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b603254610100900460ff16806125a257506125a2611c49565b806125b0575060325460ff16155b612605576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806133f8602e913960400191505060405180910390fd5b603254610100900460ff1615801561266b57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6111a37f01ffc9a700000000000000000000000000000000000000000000000000000000612a2d565b603254610100900460ff16806126ad57506126ad611c49565b806126bb575060325460ff16155b612710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806133f8602e913960400191505060405180910390fd5b603254610100900460ff1615801561277657603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b825161278990609c90602086019061322b565b50815161279d90609d90602085019061322b565b506127c77f80ac58cd00000000000000000000000000000000000000000000000000000000612a2d565b6127f07f5b5e139f00000000000000000000000000000000000000000000000000000000612a2d565b611fe77f780e9d6300000000000000000000000000000000000000000000000000000000612a2d565b603254610100900460ff16806128325750612832611c49565b80612840575060325460ff16155b612895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806133f8602e913960400191505060405180910390fd5b603254610100900460ff161580156128fb57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000612905611958565b60c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156111d257603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60009081526001919091016020526040902054151590565b6129cb8383612b19565b6129d86000848484612ca2565b610a49576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806132ef6032913960400191505060405180910390fd5b7fffffffff000000000000000000000000000000000000000000000000000000008082161415612abe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b7fffffffff0000000000000000000000000000000000000000000000000000000016600090815260656020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b73ffffffffffffffffffffffffffffffffffffffff8216612b9b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b612ba48161194b565b15612c1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b612c1c60008383610a49565b73ffffffffffffffffffffffffffffffffffffffff82166000908152609760205260409020612c4b9082612eb3565b50612c5860988284612ebf565b50604051819073ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000612cc38473ffffffffffffffffffffffffffffffffffffffff16612471565b612ccf57506001612eab565b6000612e477f150b7a0200000000000000000000000000000000000000000000000000000000612cfd611958565b888787604051602401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612d7e578181015183820152602001612d66565b50505050905090810190601f168015612dab5780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060600160405280603281526020016132ef6032913973ffffffffffffffffffffffffffffffffffffffff88169190612ee2565b90506000818060200190516020811015612e6057600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a020000000000000000000000000000000000000000000000000000000014925050505b949350505050565b6000610b4b8383612ef1565b6000611c3f848473ffffffffffffffffffffffffffffffffffffffff8516612f3b565b6060611c3f8484600085612fd2565b6000612efd83836129a9565b612f3357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b4e565b506000610b4e565b600082815260018401602052604081205480612fa0575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611c42565b82856000016001830381548110612fb357fe5b9060005260206000209060020201600101819055506000915050611c42565b60608247101561302d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806133476026913960400191505060405180910390fd5b61303685612471565b6130a157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061310a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016130cd565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461316c576040519150601f19603f3d011682016040523d82523d6000602084013e613171565b606091505b509150915061318182828661318c565b979650505050505050565b6060831561319b575081611c42565b8251156131ab5782518084602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528451602484015284518593919283926044019190850190808383600083156124075781810151838201526020016123ef565b604051806101c00160405280600e906020820280368337509192915050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261326157600085556132a7565b82601f1061327a57805160ff19168380011785556132a7565b828001600101855582156132a7579182015b828111156132a757825182559160200191906001019061328c565b506132b39291506132b7565b5090565b5b808211156132b357600081556001016132b856fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e6572a164736f6c6343000706000a",
    "sourceMap": "574:3460:40:-:0;;;1865:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1865:68:40;857:28:39;;;;-1:-1:-1;;;;;;857:28:39;;;-1:-1:-1;;;;;574:3460:40;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106101ce5760003560e01c80636352211e116101045780638da5cb5b116100a2578063c87b56dd11610071578063c87b56dd146106c3578063e271f8e3146106e0578063e985e9c514610713578063f2fde38b1461074e576101ce565b80638da5cb5b146105a557806395d89b41146105ad578063a22cb465146105b5578063b88d4fde146105f0576101ce565b80637013ca26116100de5780637013ca261461052157806370a0823114610562578063715018a6146105955780638129fc1c1461059d576101ce565b80636352211e146104c95780636c0360eb146104e65780636c267633146104ee576101ce565b80631e96917d11610171578063344610671161014b578063344610671461043857806341af5b52146104a457806342842e0e146103bc5780634f6ccce7146104ac576101ce565b80631e96917d146103b457806323b872dd146103bc5780632f745c59146103ff576101ce565b8063081812fc116101ad578063081812fc146102e8578063095ea7b31461032e578063172a93fb1461036957806318160ddd146103ac576101ce565b80623d4790146101d357806301ffc9a71461021857806306fdde031461026b575b600080fd5b610206600480360360208110156101e957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610781565b60408051918252519081900360200190f35b6102576004803603602081101561022e57600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610793565b604080519115158252519081900360200190f35b6102736107ce565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102ad578181015183820152602001610295565b50505050905090810190601f1680156102da5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610305600480360360208110156102fe57600080fd5b5035610882565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103676004803603604081101561034457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561090b565b005b6103676004803603606081101561037f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610a4e565b610206610afd565b610206610b0e565b610367600480360360608110156103d257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610b14565b6102066004803603604081101561041557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610b1c565b6104556004803603602081101561044e57600080fd5b5035610b54565b6040805173ffffffffffffffffffffffffffffffffffffffff95861681526bffffffffffffffffffffffff94851660208201529290941682850152909116606082015290519081900360800190f35b610305610bb9565b610206600480360360208110156104c257600080fd5b5035610bdd565b610305600480360360208110156104df57600080fd5b5035610bf3565b610273610c1b565b6102576004803603602081101561050457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c9a565b610529610cc4565b60405180826101c080838360005b8381101561054f578181015183820152602001610537565b5050505090500191505060405180910390f35b6102066004803603602081101561057857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610e4c565b610367610ee8565b610367610fff565b6103056111d5565b6102736111f1565b610367600480360360408110156105cb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515611270565b6103676004803603608081101561060657600080fd5b73ffffffffffffffffffffffffffffffffffffffff82358116926020810135909116916040820135919081019060808101606082013564010000000081111561064e57600080fd5b82018360208201111561066057600080fd5b8035906020019184600183028401116401000000008311171561068257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506113e1945050505050565b610273600480360360208110156106d957600080fd5b50356113ef565b610206600480360360208110156106f657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661175c565b6102576004803603604081101561072957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661176e565b6103676004803603602081101561076457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166117a9565b60fd6020526000908152604090205481565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526065602052604090205460ff165b919050565b609c8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108785780601f1061084d57610100808354040283529160200191610878565b820191906000526020600020905b81548152906001019060200180831161085b57829003601f168201915b5050505050905090565b600061088d8261194b565b6108e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613448602c913960400191505060405180910390fd5b506000908152609a602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061091682610bf3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561099d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806134a36021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109bc611958565b73ffffffffffffffffffffffffffffffffffffffff1614806109ea57506109ea816109e5611958565b61176e565b610a3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603881526020018061336d6038913960400191505060405180910390fd5b610a49838361195c565b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610af257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6f6e6c7920427269646765526f75746572000000000000000000000000000000604482015290519081900360640190fd5b610a498383836119fc565b6000610b096098611b98565b905090565b60fb5481565b610a49611ba3565b73ffffffffffffffffffffffffffffffffffffffff82166000908152609760205260408120610b4b9083611c0a565b90505b92915050565b60fc602052600090815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff808316926bffffffffffffffffffffffff740100000000000000000000000000000000000000009182900481169392831692919091041684565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080610beb609884611c16565b509392505050565b6000610b4e826040518060600160405280602981526020016133cf6029913960989190611c32565b609f8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108785780601f1061084d57610100808354040283529160200191610878565b73ffffffffffffffffffffffffffffffffffffffff16600090815260208190526040902054151590565b610ccc61320c565b50604080516101c081018252732260fac5e5542a773aa44fbcfedf7c193bc2c599815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2602082015273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489181019190915273853d955acef822db058eb8505911ed77f175b99e606082015273dac17f958d2ee523a2206206994597c13d831ec76080820152736b175474e89094c44da98b954eedeac495271d0f60a082015273d417144312dbf50465b1c641d016962017ef624060c0820152733d6f0dea3ac3c607b3998e6ce14b6350721752d960e08201527340eb746dee876ac1e78697b7ca85142d178a1fc861010082015273f1a91c7d44768070f711c68f33a7ca25c8d30268610120820152733432b6a60d23ca0dfca7761b7ab56459d9c964d0610140820152733431f91b3a388115f00c5ba9fdb899851d005fb561016082015273e5097d9baeafb89f9bcb78c9290d545db5f9e9cb61018082015273f1dc500fde233a4055e25e5bbf516372bc4f68716101a082015290565b600073ffffffffffffffffffffffffffffffffffffffff8216610eba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806133a5602a913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152609760205260409020610b4e90611b98565b610ef0611958565b73ffffffffffffffffffffffffffffffffffffffff16610f0e6111d5565b73ffffffffffffffffffffffffffffffffffffffff1614610f9057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60c95460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360c980547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b603254610100900460ff16806110185750611018611c49565b80611026575060325460ff16155b61107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806133f8602e913960400191505060405180910390fd5b603254610100900460ff161580156110e157603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6110e9611c5a565b61115d6040518060400160405280600981526020017f4e6f6d6164204e465400000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f6e6f4e4654000000000000000000000000000000000000000000000000000000815250611eeb565b61119b6040518060400160405280601681526020017f68747470733a2f2f6e66742e6e6f6d61642e78797a2f0000000000000000000081525061201a565b6111a3612031565b80156111d257603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60c95473ffffffffffffffffffffffffffffffffffffffff1690565b609d8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108785780601f1061084d57610100808354040283529160200191610878565b611278611958565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561131257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b80609b600061131f611958565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169215159290921790915561138e611958565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6113e9611ba3565b50505050565b60606113fa8261194b565b61144f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613474602f913960400191505060405180910390fd5b6000828152609e602090815260408083208054825160026001831615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190921691909104601f8101859004850282018501909352828152929091908301828280156115005780601f106114d557610100808354040283529160200191611500565b820191906000526020600020905b8154815290600101906020018083116114e357829003601f168201915b505050505090506000611511610c1b565b9050805160001415611525575090506107c9565b8151156116405780826040516020018083805190602001908083835b6020831061157e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611541565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905285519190930192850191508083835b6020831061160257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115c5565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052925050506107c9565b8061164a85612123565b6040516020018083805190602001908083835b6020831061169a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161165d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905285519190930192850191508083835b6020831061171e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016116e1565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b60006020819052908152604090205481565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152609b6020908152604080832093909416825291909152205460ff1690565b6117b1611958565b73ffffffffffffffffffffffffffffffffffffffff166117cf6111d5565b73ffffffffffffffffffffffffffffffffffffffff161461185157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806133216026913960400191505060405180910390fd5b60c95460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000610b4e609883612250565b3390565b6000818152609a6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915581906119b682610bf3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60fb805460018101909155611a11838261225c565b600081815260fc6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8a81169182178116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8b160217845560019093018054909216928916929092179055835260fd80835281842080548701908190558484529190932054929091521115611b2c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6f7665726d696e74000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16827f72d16d2b2c30660a6bd00c67b3674217920a01054fcd02777011805372a50c80856040518082815260200191505060405180910390a450505050565b6000610b4e82612276565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f207472616e73666572730000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610b4b838361227a565b6000808080611c2586866122f8565b9097909650945050505050565b6000611c3f84848461238d565b90505b9392505050565b6000611c5430612471565b15905090565b600060208190526417f117200f7ff0b998666205e50af945dcd5198861491334a6162cc24264d9a801634ee07ec8556904d7b58372297b8deaf97f2a11cb67ca5c7e99dba99b50e02c11472d0f19c22ed5af42a1599a7f57e1c7a455654f5aa599f7c07fc6521c8ea4247e8beb499344e591b9401fb2807ff9997dd598fd9e56c73a264d556a05873e2ff48e466ba2a59d7f27e997bcf7e34b5892c35718d72ca8a4d44f6f77265e19fe4feb6a8ebb16cc7b556507d8748182137fa934b07068f5d95a11413ed6d08a4a1122dc4b8c14a6ab2d94f8b279dac63042556a03c00b5742b19f454142857f5306b8fbe80b30a74098357ee8e26fad8dc069da9011cca5f0870a0a5982e541556a5dce3546a3de30fc55c6007f9cdb9ef8486d08aeebffa8fc9bbb85a20624c3ec8359d0fa1781366bd9aea8ad55699bf5a4d57a26c3c9d3b07f55813e084f33673b4b20bdc0331a65033a42722331e3f55a70ef815e1ddd4fb4556b01ab04465765b7c37a9b10007f65d12645f02a494bda192fbb7d0176b7df838fe8410c311663defbb56bfe7c28556a05f94e3dd1d341a8a949207fd50ff4d0ac27265152d143aec668d4c99a8fc77655d8a62125d1a4d3cd59087b55691692887ced913385b7807f541919c86040022d9e18ea6a255cd26949db2e27ffdd387787ea434611d53f44556a30a52129bcbbb1a75b6ac07f5f5fc63651242af2cb273d90cb6dd24751f30b6c885d12f328d3de3f13cba808556a09c3302fbb8195460740007f6fc1d9f3e3a05044d624fd126acdcb494d565eda599ac28936ba2e25ca06a62c5573f1dc500fde233a4055e25e5bbf516372bc4f6871905269444f9a32d89d50eec9647f9754ecc4659a29acf96c52a3094f54ed36634a7cb944ee6f2311c46b1437563355565b603254610100900460ff1680611f045750611f04611c49565b80611f12575060325460ff16155b611f67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806133f8602e913960400191505060405180910390fd5b603254610100900460ff16158015611fcd57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611fd5612477565b611fdd612589565b611fe78383612694565b8015610a4957603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b805161202d90609f90602084019061322b565b5050565b603254610100900460ff168061204a575061204a611c49565b80612058575060325460ff16155b6120ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806133f8602e913960400191505060405180910390fd5b603254610100900460ff1615801561211357603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b61211b612477565b6111a3612819565b606081612164575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526107c9565b8160005b811561217c57600101600a82049150612168565b60008167ffffffffffffffff8111801561219557600080fd5b506040519080825280601f01601f1916602001820160405280156121c0576020820181803683370190505b5085935090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b831561224757600a840660300160f81b8282806001900393508151811061220d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a840493506121ea565b50949350505050565b6000610b4b83836129a9565b61202d8282604051806020016040528060008152506129c1565b5490565b815460009082106122d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806132cd6022913960400191505060405180910390fd5b8260000182815481106122e557fe5b9060005260206000200154905092915050565b815460009081908310612356576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806134266022913960400191505060405180910390fd5b600084600001848154811061236757fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281612442576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156124075781810151838201526020016123ef565b50505050905090810190601f1680156124345780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061245557fe5b9060005260206000209060020201600101549150509392505050565b3b151590565b603254610100900460ff16806124905750612490611c49565b8061249e575060325460ff16155b6124f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806133f8602e913960400191505060405180910390fd5b603254610100900460ff161580156111a357603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9091166101001716600117905580156111d257603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b603254610100900460ff16806125a257506125a2611c49565b806125b0575060325460ff16155b612605576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806133f8602e913960400191505060405180910390fd5b603254610100900460ff1615801561266b57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6111a37f01ffc9a700000000000000000000000000000000000000000000000000000000612a2d565b603254610100900460ff16806126ad57506126ad611c49565b806126bb575060325460ff16155b612710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806133f8602e913960400191505060405180910390fd5b603254610100900460ff1615801561277657603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b825161278990609c90602086019061322b565b50815161279d90609d90602085019061322b565b506127c77f80ac58cd00000000000000000000000000000000000000000000000000000000612a2d565b6127f07f5b5e139f00000000000000000000000000000000000000000000000000000000612a2d565b611fe77f780e9d6300000000000000000000000000000000000000000000000000000000612a2d565b603254610100900460ff16806128325750612832611c49565b80612840575060325460ff16155b612895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806133f8602e913960400191505060405180910390fd5b603254610100900460ff161580156128fb57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000612905611958565b60c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156111d257603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60009081526001919091016020526040902054151590565b6129cb8383612b19565b6129d86000848484612ca2565b610a49576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806132ef6032913960400191505060405180910390fd5b7fffffffff000000000000000000000000000000000000000000000000000000008082161415612abe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b7fffffffff0000000000000000000000000000000000000000000000000000000016600090815260656020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b73ffffffffffffffffffffffffffffffffffffffff8216612b9b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b612ba48161194b565b15612c1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b612c1c60008383610a49565b73ffffffffffffffffffffffffffffffffffffffff82166000908152609760205260409020612c4b9082612eb3565b50612c5860988284612ebf565b50604051819073ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000612cc38473ffffffffffffffffffffffffffffffffffffffff16612471565b612ccf57506001612eab565b6000612e477f150b7a0200000000000000000000000000000000000000000000000000000000612cfd611958565b888787604051602401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612d7e578181015183820152602001612d66565b50505050905090810190601f168015612dab5780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060600160405280603281526020016132ef6032913973ffffffffffffffffffffffffffffffffffffffff88169190612ee2565b90506000818060200190516020811015612e6057600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a020000000000000000000000000000000000000000000000000000000014925050505b949350505050565b6000610b4b8383612ef1565b6000611c3f848473ffffffffffffffffffffffffffffffffffffffff8516612f3b565b6060611c3f8484600085612fd2565b6000612efd83836129a9565b612f3357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b4e565b506000610b4e565b600082815260018401602052604081205480612fa0575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611c42565b82856000016001830381548110612fb357fe5b9060005260206000209060020201600101819055506000915050611c42565b60608247101561302d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806133476026913960400191505060405180910390fd5b61303685612471565b6130a157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061310a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016130cd565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461316c576040519150601f19603f3d011682016040523d82523d6000602084013e613171565b606091505b509150915061318182828661318c565b979650505050505050565b6060831561319b575081611c42565b8251156131ab5782518084602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528451602484015284518593919283926044019190850190808383600083156124075781810151838201526020016123ef565b604051806101c00160405280600e906020820280368337509192915050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261326157600085556132a7565b82601f1061327a57805160ff19168380011785556132a7565b828001600101855582156132a7579182015b828111156132a757825182559160200191906001019061328c565b506132b39291506132b7565b5090565b5b808211156132b357600081556001016132b856fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e6572a164736f6c6343000706000a",
    "sourceMap": "574:3460:40:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1059:46;;;;;;;;;;;;;;;;-1:-1:-1;1059:46:40;;;;:::i;:::-;;;;;;;;;;;;;;;;1176:148:8;;;;;;;;;;;;;;;;-1:-1:-1;1176:148:8;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5113:98:12;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7840:217;;;;;;;;;;;;;;;;-1:-1:-1;7840:217:12;;:::i;:::-;;;;;;;;;;;;;;;;;;;7362:417;;;;;;;;;;;;;;;;-1:-1:-1;7362:417:12;;;;;;;;;:::i;:::-;;4313:226:39;;;;;;;;;;;;;;;;-1:-1:-1;4313:226:39;;;;;;;;;;;;;;;;;;:::i;6856:208:12:-;;;:::i;895:21:40:-;;;:::i;3197:162::-;;;;;;;;;;;;;;;;-1:-1:-1;3197:162:40;;;;;;;;;;;;;;;;;;:::i;6625:160:12:-;;;;;;;;;;;;;;;;-1:-1:-1;6625:160:12;;;;;;;;;:::i;965:41:40:-;;;;;;;;;;;;;;;;-1:-1:-1;965:41:40;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;466:37:39;;;:::i;7136:169:12:-;;;;;;;;;;;;;;;;-1:-1:-1;7136:169:12;;:::i;4876:175::-;;;;;;;;;;;;;;;;-1:-1:-1;4876:175:12;;:::i;6451:95::-;;;:::i;2953:163:39:-;;;;;;;;;;;;;;;;-1:-1:-1;2953:163:39;;;;:::i;3187:938::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4601:218:12;;;;;;;;;;;;;;;;-1:-1:-1;4601:218:12;;;;:::i;1967:145:7:-;;;:::i;1939:200:40:-;;;:::i;1335:85:7:-;;;:::i;5275:102:12:-;;;:::i;8124:290::-;;;;;;;;;;;;;;;;-1:-1:-1;8124:290:12;;;;;;;;;;;:::i;3659:197:40:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3659:197:40;;-1:-1:-1;3659:197:40;;-1:-1:-1;;;;;3659:197:40:i;5443:776:12:-;;;;;;;;;;;;;;;;-1:-1:-1;5443:776:12;;:::i;569:48:39:-;;;;;;;;;;;;;;;;-1:-1:-1;569:48:39;;;;:::i;8480:162:12:-;;;;;;;;;;;;;;;;-1:-1:-1;8480:162:12;;;;;;;;;;;:::i;2261:240:7:-;;;;;;;;;;;;;;;;-1:-1:-1;2261:240:7;;;;:::i;1059:46:40:-;;;;;;;;;;;;;:::o;1176:148:8:-;1284:33;;;1261:4;1284:33;;;:20;:33;;;;;;;;1176:148;;;;:::o;5113:98:12:-;5199:5;5192:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5167:13;;5192:12;;5199:5;;5192:12;;5199:5;5192:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5113:98;:::o;7840:217::-;7916:7;7943:16;7951:7;7943;:16::i;:::-;7935:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8026:24:12;;;;:15;:24;;;;;;;;;7840:217::o;7362:417::-;7442:13;7458:34;7484:7;7458:25;:34::i;:::-;7442:50;;7516:5;7510:11;;:2;:11;;;;7502:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7594:5;7578:21;;:12;:10;:12::i;:::-;:21;;;:80;;;;7603:55;7638:5;7645:12;:10;:12::i;:::-;7603:34;:55::i;:::-;7570:170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7751:21;7760:2;7764:7;7751:8;:21::i;:::-;7362:417;;;:::o;4313:226:39:-;4443:10;:26;4457:12;4443:26;;4435:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4501:31;4509:6;4517:5;4524:7;4501;:31::i;6856:208:12:-;6917:7;7036:21;:12;:19;:21::i;:::-;7029:28;;6856:208;:::o;895:21:40:-;;;;:::o;3197:162::-;3338:14;:12;:14::i;6625:160:12:-;6748:20;;;6722:7;6748:20;;;:13;:20;;;;;:30;;6772:5;6748:23;:30::i;:::-;6741:37;;6625:160;;;;;:::o;965:41:40:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;466:37:39:-;;;:::o;7136:169:12:-;7211:7;;7252:22;:12;7268:5;7252:15;:22::i;:::-;-1:-1:-1;7230:44:12;7136:169;-1:-1:-1;;;7136:169:12:o;4876:175::-;4948:7;4974:70;4991:7;4974:70;;;;;;;;;;;;;;;;;:12;;:70;:16;:70::i;6451:95::-;6531:8;6524:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6499:13;;6524:15;;6531:8;;6524:15;;6531:8;6524:15;;;;;;;;;;;;;;;;;;;;;;;;2953:163:39;3083:21;;3056:4;3083:21;;;;;;;;;;;:26;;;2953:163::o;3187:938::-;3275:26;;:::i;:::-;-1:-1:-1;3317:801:39;;;;;;;;3338:42;3317:801;;3394:42;3317:801;;;;3450:42;3317:801;;;;;;;3506:42;3317:801;;;;3562:42;3317:801;;;;3618:42;3317:801;;;;3674:42;3317:801;;;;3730:42;3317:801;;;;3786:42;3317:801;;;;3842:42;3317:801;;;;3898:42;3317:801;;;;3954:42;3317:801;;;;4010:42;3317:801;;;;4066:42;3317:801;;;;3187:938;:::o;4601:218:12:-;4673:7;4700:19;;;4692:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4783:20;;;;;;;:13;:20;;;;;:29;;:27;:29::i;1967:145:7:-;1558:12;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2057:6:::1;::::0;2036:40:::1;::::0;2073:1:::1;::::0;2036:40:::1;2057:6;::::0;2036:40:::1;::::0;2073:1;;2036:40:::1;2086:6;:19:::0;;;::::1;::::0;;1967:145::o;1939:200:40:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1647:13;;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;1990:24:40::1;:22;:24::i;:::-;2024:35;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;::::0;:13:::1;:35::i;:::-;2069:37;;;;;;;;;;;;;;;;;::::0;:11:::1;:37::i;:::-;2116:16;:14;:16::i;:::-;1794:14:11::0;1790:66;;;1824:13;:21;;;;;;1790:66;1939:200:40;:::o;1335:85:7:-;1407:6;;;;1335:85;:::o;5275:102:12:-;5363:7;5356:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5331:13;;5356:14;;5363:7;;5356:14;;5363:7;5356:14;;;;;;;;;;;;;;;;;;;;;;;;8124:290;8238:12;:10;:12::i;:::-;8226:24;;:8;:24;;;;8218:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8336:8;8291:18;:32;8310:12;:10;:12::i;:::-;8291:32;;;;;;;;;;;;;;;;;;-1:-1:-1;8291:32:12;;;:42;;;;;;;;;;;;:53;;;;;;;;;;;;;;8374:12;:10;:12::i;:::-;8359:48;;;8398:8;8359:48;;;;;;;;;;;;;;;;;;;;8124:290;;:::o;3659:197:40:-;3835:14;:12;:14::i;:::-;3659:197;;;;:::o;5443:776:12:-;5516:13;5549:16;5557:7;5549;:16::i;:::-;5541:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5628:23;5654:19;;;:10;:19;;;;;;;;5628:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5654:19;;5628:45;;;5654:19;5628:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5683:18;5704:9;:7;:9::i;:::-;5683:30;;5792:4;5786:18;5808:1;5786:23;5782:70;;;-1:-1:-1;5832:9:12;-1:-1:-1;5825:16:12;;5782:70;5954:23;;:27;5950:106;;6028:4;6034:9;6011:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6011:33:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5997:48;;;;;;5950:106;6186:4;6192:18;:7;:16;:18::i;:::-;6169:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6169:42:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6155:57;;;;5443:776;;;:::o;569:48:39:-;;;;;;;;;;;;;;:::o;8480:162:12:-;8600:25;;;;8577:4;8600:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;8480:162::o;2261:240:7:-;1558:12;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:22:::1;::::0;::::1;2341:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2450:6;::::0;2429:38:::1;::::0;::::1;::::0;;::::1;::::0;2450:6:::1;::::0;2429:38:::1;::::0;2450:6:::1;::::0;2429:38:::1;2477:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2261:240::o;11001:125:12:-;11066:4;11089:30;:12;11111:7;11089:21;:30::i;828:104:18:-;915:10;828:104;:::o;16898:200:12:-;16972:24;;;;:15;:24;;;;;:29;;;;;;;;;;;;;:24;;17025:34;16972:24;17025:25;:34::i;:::-;17016:57;;;;;;;;;;;;16898:200;;:::o;2338:792:40:-;2499:6;;;2530:1;2524:7;;2515:16;;;2541:21;2551:5;2499:6;2541:9;:21::i;:::-;2572:12;;;;:7;:12;;;;;;;;:27;;;;;;;;;;;;;2609:37;;;;;;;;;;-1:-1:-1;2656:25:40;;;:33;;;;;;;;;;;;;;2791:19;;:11;:19;;;;;;:30;;;;;;;;3009:21;;;;;;;;2986:19;;;;:44;;2978:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3108:5;3080:43;;3100:6;3080:43;;3095:3;3080:43;3115:7;3080:43;;;;;;;;;;;;;;;;;;2338:792;;;;:::o;7831:121:19:-;7900:7;7926:19;7934:3;7926:7;:19::i;3955:77:40:-;4003:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9261:135:20;9332:7;9366:22;9370:3;9382:5;9366:3;:22::i;8280:233:19:-;8360:7;;;;8419:22;8423:3;8435:5;8419:3;:22::i;:::-;8388:53;;;;-1:-1:-1;8280:233:19;-1:-1:-1;;;;;8280:233:19:o;9533:211::-;9640:7;9690:44;9695:3;9715;9721:12;9690:4;:44::i;:::-;9682:53;-1:-1:-1;9533:211:19;;;;;;:::o;1952:123:11:-;2000:4;2024:44;2062:4;2024:29;:44::i;:::-;2023:45;2016:52;;1952:123;:::o;944:1797:39:-;1046:13;:79;;;;1128:15;1046:79;:97;1235:30;1153:79;:112;1357:18;1275:79;:100;1467:33;1385:79;:115;1592:17;1510:79;:99;1701:33;1619:79;:115;1826:35;1744:79;:117;1953:31;1871:79;:113;2076:35;1994:79;:117;2203:33;2121:79;:115;2328:31;2246:79;:113;2451:34;2369:79;:116;2577:34;2495:79;:116;2648:42;2621:79;;2703:31;2621:79;:113;944:1797::o;3918:215:12:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1647:13;;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;4016:26:12::1;:24;:26::i;:::-;4052:25;:23;:25::i;:::-;4087:39;4111:5;4118:7;4087:23;:39::i;:::-;1794:14:11::0;1790:66;;;1824:13;:21;;;;;;3918:215:12;;;:::o;15535:98::-;15607:19;;;;:8;;:19;;;;;:::i;:::-;;15535:98;:::o;935:126:7:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1647:13;;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;992:26:7::1;:24;:26::i;:::-;1028;:24;:26::i;221:725:21:-:0;277:13;494:10;490:51;;-1:-1:-1;520:10:21;;;;;;;;;;;;;;;;;;;490:51;565:5;550:12;604:75;611:9;;604:75;;636:8;;666:2;658:10;;;;604:75;;;688:19;720:6;710:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;710:17:21;-1:-1:-1;780:5:21;;-1:-1:-1;688:39:21;-1:-1:-1;753:10:21;;;795:114;802:9;;795:114;;870:2;863:4;:9;858:2;:14;845:29;;827:6;834:7;;;;;;;827:15;;;;;;;;;;;:47;;;;;;;;;;-1:-1:-1;896:2:21;888:10;;;;795:114;;;-1:-1:-1;932:6:21;221:725;-1:-1:-1;;;;221:725:21:o;7599:149:19:-;7683:4;7706:35;7716:3;7736;7706:9;:35::i;11988:108:12:-;12063:26;12073:2;12077:7;12063:26;;;;;;;;;;;;:9;:26::i;4502:108:19:-;4584:19;;4502:108::o;4463:201:20:-;4557:18;;4530:7;;4557:26;-1:-1:-1;4549:73:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4639:3;:11;;4651:5;4639:18;;;;;;;;;;;;;;;;4632:25;;4463:201;;;;:::o;4953:274:19:-;5056:19;;5020:7;;;;5056:27;-1:-1:-1;5048:74:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5133:22;5158:3;:12;;5171:5;5158:19;;;;;;;;;;;;;;;;;;5133:44;;5195:5;:10;;;5207:5;:12;;;5187:33;;;;;4953:274;;;;;:::o;6414:315::-;6508:7;6546:17;;;:12;;;:17;;;;;;6596:12;6581:13;6573:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6662:3;:12;;6686:1;6675:8;:12;6662:26;;;;;;;;;;;;;;;;;;:33;;;6655:40;;;6414:315;;;;;:::o;737:413:17:-;1097:20;1135:8;;;737:413::o;759:64:18:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1647:13;;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1794:14;1790:66;;;1824:13;:21;;;;;;759:64:18;:::o;777:249:8:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1647:13;;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;979:40:8::1;998:20:::0;979:18:::1;:40::i;4139:403:12:-:0;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1647:13;;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;4247:13:12;;::::1;::::0;:5:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;4270:17:12;;::::1;::::0;:7:::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;4375:40:12::1;4394:20:::0;4375:18:::1;:40::i;:::-;4425:49;4444:29:::0;4425:18:::1;:49::i;:::-;4484:51;4503:31:::0;4484:18:::1;:51::i;1067:192:7:-:0;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1647:13;;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;1134:17:7::1;1154:12;:10;:12::i;:::-;1176:6;:18:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;1209:43:::1;::::0;1176:18;;-1:-1:-1;1176:18:7;-1:-1:-1;;1209:43:7::1;::::0;-1:-1:-1;;1209:43:7::1;1778:1:11;1794:14:::0;1790:66;;;1824:13;:21;;;;;;1067:192:7;:::o;4289:123:19:-;4360:4;4383:17;;;:12;;;;;:17;;;;;;:22;;;4289:123::o;12317:247:12:-;12412:18;12418:2;12422:7;12412:5;:18::i;:::-;12448:54;12479:1;12483:2;12487:7;12496:5;12448:22;:54::i;:::-;12440:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1718:198:8;1801:25;;;;;;1793:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1869:33;;;;;;:20;:33;;;;;:40;;;;1905:4;1869:40;;;1718:198::o;12886:393:12:-;12965:16;;;12957:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13037:16;13045:7;13037;:16::i;:::-;13036:17;13028:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13097:45;13126:1;13130:2;13134:7;13097:20;:45::i;:::-;13153:17;;;;;;;:13;:17;;;;;:30;;13175:7;13153:21;:30::i;:::-;-1:-1:-1;13194:29:12;:12;13211:7;13220:2;13194:16;:29::i;:::-;-1:-1:-1;13239:33:12;;13264:7;;13239:33;;;;13256:1;;13239:33;;13256:1;;13239:33;12886:393;;:::o;16186:600::-;16306:4;16331:15;:2;:13;;;:15::i;:::-;16326:58;;-1:-1:-1;16369:4:12;16362:11;;16326:58;16393:23;16419:257;16471:56;16541:12;:10;:12::i;:::-;16567:4;16585:7;16606:5;16435:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16419:257;;;;;;;;;;;;;;;;;:15;;;;:257;:15;:257::i;:::-;16393:283;;16686:13;16713:10;16702:32;;;;;;;;;;;;;;;-1:-1:-1;16702:32:12;16752:26;;16762:16;16752:26;;-1:-1:-1;;;16186:600:12;;;;;;;:::o;8079:129:20:-;8146:4;8169:32;8174:3;8194:5;8169:4;:32::i;7038:183:19:-;7127:4;7150:64;7155:3;7175;7189:23;;;7150:4;:64::i;3592:193:17:-;3695:12;3726:52;3748:6;3756:4;3762:1;3765:12;3726:21;:52::i;1651:404:20:-;1714:4;1735:21;1745:3;1750:5;1735:9;:21::i;:::-;1730:319;;-1:-1:-1;1772:23:20;;;;;;;;:11;:23;;;;;;;;;;;;;1952:18;;1930:19;;;:12;;;:19;;;;;;:40;;;;1984:11;;1730:319;-1:-1:-1;2033:5:20;2026:12;;1847:678:19;1923:4;2056:17;;;:12;;;:17;;;;;;2088:13;2084:435;;-1:-1:-1;;2172:38:19;;;;;;;;;;;;;;;;;;2154:57;;;;;;;;:12;:57;;;;;;;;;;;;;;;;;;;;;;;;2366:19;;2346:17;;;:12;;;:17;;;;;;;:39;2399:11;;2084:435;2477:5;2441:3;:12;;2465:1;2454:8;:12;2441:26;;;;;;;;;;;;;;;;;;:33;;:41;;;;2503:5;2496:12;;;;;4619:523:17;4746:12;4803:5;4778:21;:30;;4770:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4869:18;4880:6;4869:10;:18::i;:::-;4861:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4992:12;5006:23;5033:6;:11;;5053:5;5061:4;5033:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4991:75;;;;5083:52;5101:7;5110:10;5122:12;5083:17;:52::i;:::-;5076:59;4619:523;-1:-1:-1;;;;;;;4619:523:17:o;6122:725::-;6237:12;6265:7;6261:580;;;-1:-1:-1;6295:10:17;6288:17;;6261:580;6406:17;;:21;6402:429;;6664:10;6658:17;6724:15;6711:10;6707:2;6703:19;6696:44;6613:145;6796:20;;;;;;;;;;;;;;;;;;;;6803:12;;6796:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;",
    "linkReferences": {},
    "immutableReferences": {
      "32615": [
        {
          "start": 2662,
          "length": 32
        },
        {
          "start": 3003,
          "length": 32
        }
      ]
    }
  },
  "methodIdentifiers": {
    "affectedAssets()": "7013ca26",
    "approve(address,uint256)": "095ea7b3",
    "balanceOf(address)": "70a08231",
    "baseURI()": "6c0360eb",
    "bridgeRouter()": "41af5b52",
    "getApproved(uint256)": "081812fc",
    "initialize()": "8129fc1c",
    "isAffectedAsset(address)": "6c267633",
    "isApprovedForAll(address,address)": "e985e9c5",
    "name()": "06fdde03",
    "nextID()": "1e96917d",
    "owner()": "8da5cb5b",
    "ownerOf(uint256)": "6352211e",
    "record(address,address,uint256)": "172a93fb",
    "records(uint256)": "34461067",
    "renounceOwnership()": "715018a6",
    "safeTransferFrom(address,address,uint256)": "42842e0e",
    "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
    "setApprovalForAll(address,bool)": "a22cb465",
    "supportsInterface(bytes4)": "01ffc9a7",
    "symbol()": "95d89b41",
    "tokenByIndex(uint256)": "4f6ccce7",
    "tokenOfOwnerByIndex(address,uint256)": "2f745c59",
    "tokenURI(uint256)": "c87b56dd",
    "totalAffected(address)": "e271f8e3",
    "totalMinted(address)": "003d4790",
    "totalSupply()": "18160ddd",
    "transferFrom(address,address,uint256)": "23b872dd",
    "transferOwnership(address)": "f2fde38b"
  },
  "ast": {
    "absolutePath": "packages/contracts-bridge/contracts/accountants/NFTAccountant.sol",
    "id": 33523,
    "exportedSymbols": {
      "AllowListNFTRecoveryAccountant": [
        33522
      ],
      "ERC721Upgradeable": [
        24650
      ],
      "EventAccountant": [
        32803
      ],
      "IERC20": [
        27517
      ],
      "NFTAccountant": [
        33021
      ],
      "NFTRecoveryAccountant": [
        33330
      ],
      "OwnableUpgradeable": [
        23168
      ],
      "SafeERC20": [
        27730
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:11726:40",
    "nodes": [
      {
        "id": 32805,
        "nodeType": "PragmaDirective",
        "src": "46:22:40",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 32807,
        "nodeType": "ImportDirective",
        "src": "116:54:40",
        "absolutePath": "packages/contracts-bridge/contracts/accountants/EventAccountant.sol",
        "file": "./EventAccountant.sol",
        "scope": 33523,
        "sourceUnit": 32804,
        "symbolAliases": [
          {
            "foreign": {
              "id": 32806,
              "name": "EventAccountant",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "124:15:40",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 32809,
        "nodeType": "ImportDirective",
        "src": "217:70:40",
        "absolutePath": "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "scope": 33523,
        "sourceUnit": 27518,
        "symbolAliases": [
          {
            "foreign": {
              "id": 32808,
              "name": "IERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "225:6:40",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 32811,
        "nodeType": "ImportDirective",
        "src": "288:76:40",
        "absolutePath": "node_modules/@openzeppelin/contracts/token/ERC20/SafeERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/SafeERC20.sol",
        "scope": 33523,
        "sourceUnit": 27731,
        "symbolAliases": [
          {
            "foreign": {
              "id": 32810,
              "name": "SafeERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "296:9:40",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 32813,
        "nodeType": "ImportDirective",
        "src": "365:105:40",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol",
        "scope": 33523,
        "sourceUnit": 24651,
        "symbolAliases": [
          {
            "foreign": {
              "id": 32812,
              "name": "ERC721Upgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "373:17:40",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 32815,
        "nodeType": "ImportDirective",
        "src": "471:101:40",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "scope": 33523,
        "sourceUnit": 23169,
        "symbolAliases": [
          {
            "foreign": {
              "id": 32814,
              "name": "OwnableUpgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "479:18:40",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 33021,
        "nodeType": "ContractDefinition",
        "src": "574:3460:40",
        "nodes": [
          {
            "id": 32830,
            "nodeType": "StructDefinition",
            "src": "738:123:40",
            "canonicalName": "NFTAccountant.Record",
            "members": [
              {
                "constant": false,
                "id": 32823,
                "mutability": "mutable",
                "name": "asset",
                "nodeType": "VariableDeclaration",
                "scope": 32830,
                "src": "762:13:40",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 32822,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "762:7:40",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 32825,
                "mutability": "mutable",
                "name": "amount",
                "nodeType": "VariableDeclaration",
                "scope": 32830,
                "src": "785:13:40",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint96",
                  "typeString": "uint96"
                },
                "typeName": {
                  "id": 32824,
                  "name": "uint96",
                  "nodeType": "ElementaryTypeName",
                  "src": "785:6:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 32827,
                "mutability": "mutable",
                "name": "originalUser",
                "nodeType": "VariableDeclaration",
                "scope": 32830,
                "src": "808:20:40",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 32826,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "808:7:40",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 32829,
                "mutability": "mutable",
                "name": "recovered",
                "nodeType": "VariableDeclaration",
                "scope": 32830,
                "src": "838:16:40",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint96",
                  "typeString": "uint96"
                },
                "typeName": {
                  "id": 32828,
                  "name": "uint96",
                  "nodeType": "ElementaryTypeName",
                  "src": "838:6:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Record",
            "scope": 33021,
            "visibility": "public"
          },
          {
            "id": 32833,
            "nodeType": "VariableDeclaration",
            "src": "895:21:40",
            "constant": false,
            "documentation": {
              "id": 32831,
              "nodeType": "StructuredDocumentation",
              "src": "867:23:40",
              "text": "@notice next NFT ID"
            },
            "functionSelector": "1e96917d",
            "mutability": "mutable",
            "name": "nextID",
            "scope": 33021,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 32832,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "895:7:40",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "id": 32838,
            "nodeType": "VariableDeclaration",
            "src": "965:41:40",
            "constant": false,
            "documentation": {
              "id": 32834,
              "nodeType": "StructuredDocumentation",
              "src": "922:38:40",
              "text": "@notice maps NFT ID to NFT details"
            },
            "functionSelector": "34461067",
            "mutability": "mutable",
            "name": "records",
            "scope": 33021,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
              "typeString": "mapping(uint256 => struct NFTAccountant.Record)"
            },
            "typeName": {
              "id": 32837,
              "keyType": {
                "id": 32835,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "973:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "965:26:40",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                "typeString": "mapping(uint256 => struct NFTAccountant.Record)"
              },
              "valueType": {
                "id": 32836,
                "name": "Record",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 32830,
                "src": "984:6:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Record_$32830_storage_ptr",
                  "typeString": "struct NFTAccountant.Record"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 32843,
            "nodeType": "VariableDeclaration",
            "src": "1059:46:40",
            "constant": false,
            "documentation": {
              "id": 32839,
              "nodeType": "StructuredDocumentation",
              "src": "1012:42:40",
              "text": "@notice token address => amount minted"
            },
            "functionSelector": "003d4790",
            "mutability": "mutable",
            "name": "totalMinted",
            "scope": 33021,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 32842,
              "keyType": {
                "id": 32840,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1067:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1059:27:40",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 32841,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1078:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 32847,
            "nodeType": "VariableDeclaration",
            "src": "1188:25:40",
            "constant": false,
            "mutability": "mutable",
            "name": "__GAP",
            "scope": 33021,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$47_storage",
              "typeString": "uint256[47]"
            },
            "typeName": {
              "baseType": {
                "id": 32844,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1188:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 32846,
              "length": {
                "hexValue": "3437",
                "id": 32845,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1196:2:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_47_by_1",
                  "typeString": "int_const 47"
                },
                "value": "47"
              },
              "nodeType": "ArrayTypeName",
              "src": "1188:11:40",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$47_storage_ptr",
                "typeString": "uint256[47]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 32858,
            "nodeType": "EventDefinition",
            "src": "1668:145:40",
            "anonymous": false,
            "documentation": {
              "id": 32848,
              "nodeType": "StructuredDocumentation",
              "src": "1220:443:40",
              "text": " @notice emitted when tokens would have been transferred, but the asset\n         was in the affected assets list\n @param id The token ID of the NFT minted\n @param asset The address of the affected token contract\n @param recipient The intended recipient of the tokens; the recipient in the\n                  transfer message\n @param amount The amount of tokens that would have been received"
            },
            "name": "ProcessFailure",
            "parameters": {
              "id": 32857,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32850,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 32858,
                  "src": "1698:18:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32849,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1698:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32852,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 32858,
                  "src": "1726:21:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32851,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1726:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32854,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 32858,
                  "src": "1757:25:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32853,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1757:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32856,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 32858,
                  "src": "1792:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32855,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1792:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1688:124:40"
            }
          },
          {
            "id": 32868,
            "nodeType": "FunctionDefinition",
            "src": "1865:68:40",
            "body": {
              "id": 32867,
              "nodeType": "Block",
              "src": "1931:2:40",
              "statements": []
            },
            "documentation": {
              "id": 32859,
              "nodeType": "StructuredDocumentation",
              "src": "1819:41:40",
              "text": "============ Constructor ============"
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 32864,
                    "name": "_bridgeRouter",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 32861,
                    "src": "1916:13:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 32865,
                "modifierName": {
                  "id": 32863,
                  "name": "EventAccountant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 32803,
                  "src": "1900:15:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_EventAccountant_$32803_$",
                    "typeString": "type(contract EventAccountant)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1900:30:40"
              }
            ],
            "name": "",
            "parameters": {
              "id": 32862,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32861,
                  "mutability": "mutable",
                  "name": "_bridgeRouter",
                  "nodeType": "VariableDeclaration",
                  "scope": 32868,
                  "src": "1877:21:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32860,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1877:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1876:23:40"
            },
            "returnParameters": {
              "id": 32866,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1931:0:40"
            },
            "scope": 33021,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 32889,
            "nodeType": "FunctionDefinition",
            "src": "1939:200:40",
            "body": {
              "id": 32888,
              "nodeType": "Block",
              "src": "1980:159:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 32873,
                      "name": "__EventAccountant_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32724,
                      "src": "1990:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 32874,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1990:24:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32875,
                  "nodeType": "ExpressionStatement",
                  "src": "1990:24:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "4e6f6d6164204e4654",
                        "id": 32877,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2038:11:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_73705ff8c87c78491cad94fc4048a87479751186d494b98ca380f44567eb66b3",
                          "typeString": "literal_string \"Nomad NFT\""
                        },
                        "value": "Nomad NFT"
                      },
                      {
                        "hexValue": "6e6f4e4654",
                        "id": 32878,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2051:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_feeec76c1e7d99038cf05db3525f706c6ff9b99fb2150ec1af868e4275afd812",
                          "typeString": "literal_string \"noNFT\""
                        },
                        "value": "noNFT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_73705ff8c87c78491cad94fc4048a87479751186d494b98ca380f44567eb66b3",
                          "typeString": "literal_string \"Nomad NFT\""
                        },
                        {
                          "typeIdentifier": "t_stringliteral_feeec76c1e7d99038cf05db3525f706c6ff9b99fb2150ec1af868e4275afd812",
                          "typeString": "literal_string \"noNFT\""
                        }
                      ],
                      "id": 32876,
                      "name": "__ERC721_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23778,
                      "src": "2024:13:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory,string memory)"
                      }
                    },
                    "id": 32879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2024:35:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32880,
                  "nodeType": "ExpressionStatement",
                  "src": "2024:35:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "68747470733a2f2f6e66742e6e6f6d61642e78797a2f",
                        "id": 32882,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2081:24:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d0ce0de2f36d89df2b311098b24ea05535edc351c8fecdb50dd3f24b3f9482ee",
                          "typeString": "literal_string \"https://nft.nomad.xyz/\""
                        },
                        "value": "https://nft.nomad.xyz/"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_d0ce0de2f36d89df2b311098b24ea05535edc351c8fecdb50dd3f24b3f9482ee",
                          "typeString": "literal_string \"https://nft.nomad.xyz/\""
                        }
                      ],
                      "id": 32881,
                      "name": "_setBaseURI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24552,
                      "src": "2069:11:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory)"
                      }
                    },
                    "id": 32883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2069:37:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32884,
                  "nodeType": "ExpressionStatement",
                  "src": "2069:37:40"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 32885,
                      "name": "__Ownable_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23067,
                      "src": "2116:14:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 32886,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2116:16:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32887,
                  "nodeType": "ExpressionStatement",
                  "src": "2116:16:40"
                }
              ]
            },
            "functionSelector": "8129fc1c",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 32871,
                "modifierName": {
                  "id": 32870,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23659,
                  "src": "1968:11:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1968:11:40"
              }
            ],
            "name": "initialize",
            "parameters": {
              "id": 32869,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1958:2:40"
            },
            "returnParameters": {
              "id": 32872,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1980:0:40"
            },
            "scope": 33021,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 32964,
            "nodeType": "FunctionDefinition",
            "src": "2338:792:40",
            "body": {
              "id": 32963,
              "nodeType": "Block",
              "src": "2451:679:40",
              "statements": [
                {
                  "assignments": [
                    32901
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32901,
                      "mutability": "mutable",
                      "name": "_id",
                      "nodeType": "VariableDeclaration",
                      "scope": 32963,
                      "src": "2485:11:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 32900,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2485:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 32903,
                  "initialValue": {
                    "id": 32902,
                    "name": "nextID",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 32833,
                    "src": "2499:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2485:20:40"
                },
                {
                  "expression": {
                    "id": 32908,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 32904,
                      "name": "nextID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32833,
                      "src": "2515:6:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 32907,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 32905,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32901,
                        "src": "2524:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 32906,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2530:1:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "2524:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2515:16:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32909,
                  "nodeType": "ExpressionStatement",
                  "src": "2515:16:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 32911,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32894,
                        "src": "2551:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 32912,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32901,
                        "src": "2558:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 32910,
                      "name": "_safeMint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        24290,
                        24319
                      ],
                      "referencedDeclaration": 24290,
                      "src": "2541:9:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 32913,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2541:21:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32914,
                  "nodeType": "ExpressionStatement",
                  "src": "2541:21:40"
                },
                {
                  "expression": {
                    "id": 32920,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 32915,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32838,
                          "src": "2572:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                            "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                          }
                        },
                        "id": 32917,
                        "indexExpression": {
                          "id": 32916,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32901,
                          "src": "2580:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2572:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage",
                          "typeString": "struct NFTAccountant.Record storage ref"
                        }
                      },
                      "id": 32918,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "asset",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32823,
                      "src": "2572:18:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 32919,
                      "name": "_asset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32892,
                      "src": "2593:6:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2572:27:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 32921,
                  "nodeType": "ExpressionStatement",
                  "src": "2572:27:40"
                },
                {
                  "expression": {
                    "id": 32930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 32922,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32838,
                          "src": "2609:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                            "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                          }
                        },
                        "id": 32924,
                        "indexExpression": {
                          "id": 32923,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32901,
                          "src": "2617:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2609:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage",
                          "typeString": "struct NFTAccountant.Record storage ref"
                        }
                      },
                      "id": 32925,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32825,
                      "src": "2609:19:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 32928,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32896,
                          "src": "2638:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 32927,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2631:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint96_$",
                          "typeString": "type(uint96)"
                        },
                        "typeName": {
                          "id": 32926,
                          "name": "uint96",
                          "nodeType": "ElementaryTypeName",
                          "src": "2631:6:40",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 32929,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2631:15:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "src": "2609:37:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "id": 32931,
                  "nodeType": "ExpressionStatement",
                  "src": "2609:37:40"
                },
                {
                  "expression": {
                    "id": 32937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 32932,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32838,
                          "src": "2656:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                            "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                          }
                        },
                        "id": 32934,
                        "indexExpression": {
                          "id": 32933,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32901,
                          "src": "2664:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2656:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage",
                          "typeString": "struct NFTAccountant.Record storage ref"
                        }
                      },
                      "id": 32935,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "originalUser",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32827,
                      "src": "2656:25:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 32936,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32894,
                      "src": "2684:5:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2656:33:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 32938,
                  "nodeType": "ExpressionStatement",
                  "src": "2656:33:40"
                },
                {
                  "expression": {
                    "id": 32943,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 32939,
                        "name": "totalMinted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32843,
                        "src": "2791:11:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 32941,
                      "indexExpression": {
                        "id": 32940,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32892,
                        "src": "2803:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2791:19:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 32942,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32896,
                      "src": "2814:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2791:30:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 32944,
                  "nodeType": "ExpressionStatement",
                  "src": "2791:30:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 32952,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 32946,
                            "name": "totalMinted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32843,
                            "src": "2986:11:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 32948,
                          "indexExpression": {
                            "id": 32947,
                            "name": "_asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32892,
                            "src": "2998:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2986:19:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "baseExpression": {
                            "id": 32949,
                            "name": "totalAffected",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32620,
                            "src": "3009:13:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 32951,
                          "indexExpression": {
                            "id": 32950,
                            "name": "_asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32892,
                            "src": "3023:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3009:21:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2986:44:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6f7665726d696e74",
                        "id": 32953,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3032:10:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_76beae41b64258c540c9f2e99968e43d7d30dc15c6949f84d5466099ab74e038",
                          "typeString": "literal_string \"overmint\""
                        },
                        "value": "overmint"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_76beae41b64258c540c9f2e99968e43d7d30dc15c6949f84d5466099ab74e038",
                          "typeString": "literal_string \"overmint\""
                        }
                      ],
                      "id": 32945,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2978:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 32954,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2978:65:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32955,
                  "nodeType": "ExpressionStatement",
                  "src": "2978:65:40"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 32957,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32901,
                        "src": "3095:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 32958,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32892,
                        "src": "3100:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 32959,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32894,
                        "src": "3108:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 32960,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32896,
                        "src": "3115:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 32956,
                      "name": "ProcessFailure",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32858,
                      "src": "3080:14:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,address,address,uint256)"
                      }
                    },
                    "id": 32961,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3080:43:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32962,
                  "nodeType": "EmitStatement",
                  "src": "3075:48:40"
                }
              ]
            },
            "baseFunctions": [
              32802
            ],
            "documentation": {
              "id": 32890,
              "nodeType": "StructuredDocumentation",
              "src": "2145:188:40",
              "text": " @notice Records information to state and logs a ProcessFailure event\n @param _asset  The asset\n @param _user   The recipient\n @param _amount The amount"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_record",
            "overrides": {
              "id": 32898,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2442:8:40"
            },
            "parameters": {
              "id": 32897,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32892,
                  "mutability": "mutable",
                  "name": "_asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 32964,
                  "src": "2364:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32891,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2364:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32894,
                  "mutability": "mutable",
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 32964,
                  "src": "2388:13:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32893,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2388:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32896,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 32964,
                  "src": "2411:15:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32895,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2411:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2354:78:40"
            },
            "returnParameters": {
              "id": 32899,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2451:0:40"
            },
            "scope": 33021,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 32979,
            "nodeType": "FunctionDefinition",
            "src": "3197:162:40",
            "body": {
              "id": 32978,
              "nodeType": "Block",
              "src": "3328:31:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 32975,
                      "name": "_noTransfers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33020,
                      "src": "3338:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 32976,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3338:14:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32977,
                  "nodeType": "ExpressionStatement",
                  "src": "3338:14:40"
                }
              ]
            },
            "baseFunctions": [
              24141
            ],
            "documentation": {
              "id": 32965,
              "nodeType": "StructuredDocumentation",
              "src": "3136:56:40",
              "text": " @notice Override to disable transfers"
            },
            "functionSelector": "23b872dd",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferFrom",
            "overrides": {
              "id": 32973,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3319:8:40"
            },
            "parameters": {
              "id": 32972,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32967,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32979,
                  "src": "3228:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32966,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3228:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32969,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32979,
                  "src": "3254:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32968,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3254:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32971,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32979,
                  "src": "3278:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32970,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3278:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3218:85:40"
            },
            "returnParameters": {
              "id": 32974,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3328:0:40"
            },
            "scope": 33021,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 32994,
            "nodeType": "FunctionDefinition",
            "src": "3426:166:40",
            "body": {
              "id": 32993,
              "nodeType": "Block",
              "src": "3561:31:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 32990,
                      "name": "_noTransfers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33020,
                      "src": "3571:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 32991,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3571:14:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32992,
                  "nodeType": "ExpressionStatement",
                  "src": "3571:14:40"
                }
              ]
            },
            "baseFunctions": [
              24160
            ],
            "documentation": {
              "id": 32980,
              "nodeType": "StructuredDocumentation",
              "src": "3365:56:40",
              "text": " @notice Override to disable transfers"
            },
            "functionSelector": "42842e0e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "safeTransferFrom",
            "overrides": {
              "id": 32988,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3552:8:40"
            },
            "parameters": {
              "id": 32987,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32982,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32994,
                  "src": "3461:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32981,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3461:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32984,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32994,
                  "src": "3487:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32983,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3487:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32986,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32994,
                  "src": "3511:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 32985,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3511:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3451:85:40"
            },
            "returnParameters": {
              "id": 32989,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3561:0:40"
            },
            "scope": 33021,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 33011,
            "nodeType": "FunctionDefinition",
            "src": "3659:197:40",
            "body": {
              "id": 33010,
              "nodeType": "Block",
              "src": "3825:31:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 33007,
                      "name": "_noTransfers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33020,
                      "src": "3835:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 33008,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3835:14:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33009,
                  "nodeType": "ExpressionStatement",
                  "src": "3835:14:40"
                }
              ]
            },
            "baseFunctions": [
              24190
            ],
            "documentation": {
              "id": 32995,
              "nodeType": "StructuredDocumentation",
              "src": "3598:56:40",
              "text": " @notice Override to disable transfers"
            },
            "functionSelector": "b88d4fde",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "safeTransferFrom",
            "overrides": {
              "id": 33005,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3816:8:40"
            },
            "parameters": {
              "id": 33004,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32997,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33011,
                  "src": "3694:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32996,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3694:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32999,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33011,
                  "src": "3720:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32998,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3720:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33001,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33011,
                  "src": "3744:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33000,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3744:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33003,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33011,
                  "src": "3773:12:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 33002,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3773:5:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3684:116:40"
            },
            "returnParameters": {
              "id": 33006,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3825:0:40"
            },
            "scope": 33021,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 33020,
            "nodeType": "FunctionDefinition",
            "src": "3955:77:40",
            "body": {
              "id": 33019,
              "nodeType": "Block",
              "src": "3993:39:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "6e6f207472616e7366657273",
                        "id": 33016,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4010:14:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_02aaa93344ce36827919ee7613bf5a0bbdbf5bab3149312b44f785458d9f24c4",
                          "typeString": "literal_string \"no transfers\""
                        },
                        "value": "no transfers"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_02aaa93344ce36827919ee7613bf5a0bbdbf5bab3149312b44f785458d9f24c4",
                          "typeString": "literal_string \"no transfers\""
                        }
                      ],
                      "id": 33015,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "4003:6:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 33017,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4003:22:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33018,
                  "nodeType": "ExpressionStatement",
                  "src": "4003:22:40"
                }
              ]
            },
            "documentation": {
              "id": 33012,
              "nodeType": "StructuredDocumentation",
              "src": "3862:88:40",
              "text": " @notice Revert with the same error message on any attempted transfers"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_noTransfers",
            "parameters": {
              "id": 33013,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3976:2:40"
            },
            "returnParameters": {
              "id": 33014,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3993:0:40"
            },
            "scope": 33021,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 32816,
              "name": "EventAccountant",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 32803,
              "src": "604:15:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EventAccountant_$32803",
                "typeString": "contract EventAccountant"
              }
            },
            "id": 32817,
            "nodeType": "InheritanceSpecifier",
            "src": "604:15:40"
          },
          {
            "baseName": {
              "id": 32818,
              "name": "ERC721Upgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 24650,
              "src": "625:17:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC721Upgradeable_$24650",
                "typeString": "contract ERC721Upgradeable"
              }
            },
            "id": 32819,
            "nodeType": "InheritanceSpecifier",
            "src": "625:17:40"
          },
          {
            "baseName": {
              "id": 32820,
              "name": "OwnableUpgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 23168,
              "src": "648:18:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OwnableUpgradeable_$23168",
                "typeString": "contract OwnableUpgradeable"
              }
            },
            "id": 32821,
            "nodeType": "InheritanceSpecifier",
            "src": "648:18:40"
          }
        ],
        "contractDependencies": [
          23168,
          23243,
          23255,
          23676,
          24650,
          24681,
          24708,
          24842,
          25131,
          32803,
          33635
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          33021,
          23168,
          24650,
          24681,
          24708,
          24842,
          23243,
          23255,
          25131,
          23676,
          32803,
          33635
        ],
        "name": "NFTAccountant",
        "scope": 33523
      },
      {
        "id": 33330,
        "nodeType": "ContractDefinition",
        "src": "4069:4904:40",
        "nodes": [
          {
            "id": 33027,
            "nodeType": "UsingForDirective",
            "src": "4132:27:40",
            "libraryName": {
              "id": 33025,
              "name": "SafeERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 27730,
              "src": "4138:9:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeERC20_$27730",
                "typeString": "library SafeERC20"
              }
            },
            "typeName": {
              "id": 33026,
              "name": "IERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 27517,
              "src": "4152:6:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20_$27517",
                "typeString": "contract IERC20"
              }
            }
          },
          {
            "id": 33030,
            "nodeType": "VariableDeclaration",
            "src": "4275:39:40",
            "constant": false,
            "documentation": {
              "id": 33028,
              "nodeType": "StructuredDocumentation",
              "src": "4165:105:40",
              "text": "@notice the address that receives funds\n that should not have been transferred to the contract"
            },
            "functionSelector": "3b6fd2cf",
            "mutability": "immutable",
            "name": "fundsRecipient",
            "scope": 33330,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 33029,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "4275:7:40",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "id": 33035,
            "nodeType": "VariableDeclaration",
            "src": "4377:49:40",
            "constant": false,
            "documentation": {
              "id": 33031,
              "nodeType": "StructuredDocumentation",
              "src": "4321:51:40",
              "text": "@notice token address => total amount collected"
            },
            "functionSelector": "f3f05313",
            "mutability": "mutable",
            "name": "totalCollected",
            "scope": 33330,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 33034,
              "keyType": {
                "id": 33032,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "4385:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "4377:27:40",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 33033,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "4396:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 33040,
            "nodeType": "VariableDeclaration",
            "src": "4497:49:40",
            "constant": false,
            "documentation": {
              "id": 33036,
              "nodeType": "StructuredDocumentation",
              "src": "4432:60:40",
              "text": "@notice token address => total amount recovered to users"
            },
            "functionSelector": "bf799f2b",
            "mutability": "mutable",
            "name": "totalRecovered",
            "scope": 33330,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 33039,
              "keyType": {
                "id": 33037,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "4505:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "4497:27:40",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 33038,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "4516:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 33044,
            "nodeType": "VariableDeclaration",
            "src": "4629:25:40",
            "constant": false,
            "mutability": "mutable",
            "name": "__GAP",
            "scope": 33330,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$48_storage",
              "typeString": "uint256[48]"
            },
            "typeName": {
              "baseType": {
                "id": 33041,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "4629:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 33043,
              "length": {
                "hexValue": "3438",
                "id": 33042,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "4637:2:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_48_by_1",
                  "typeString": "int_const 48"
                },
                "value": "48"
              },
              "nodeType": "ArrayTypeName",
              "src": "4629:11:40",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$48_storage_ptr",
                "typeString": "uint256[48]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 33055,
            "nodeType": "EventDefinition",
            "src": "4913:139:40",
            "anonymous": false,
            "documentation": {
              "id": 33045,
              "nodeType": "StructuredDocumentation",
              "src": "4661:247:40",
              "text": " @notice A recovery event.\n @param id The tokenId recovering funds\n @param asset The asset being transferred\n @param recipient The user receiving the asset\n @param amount The amount transferred to the user"
            },
            "name": "Recovery",
            "parameters": {
              "id": 33054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33047,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 33055,
                  "src": "4937:18:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33046,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4937:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33049,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 33055,
                  "src": "4965:21:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33048,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4965:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33051,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 33055,
                  "src": "4996:25:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33050,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4996:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33053,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 33055,
                  "src": "5031:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33052,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5031:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4927:124:40"
            }
          },
          {
            "id": 33071,
            "nodeType": "FunctionDefinition",
            "src": "5104:150:40",
            "body": {
              "id": 33070,
              "nodeType": "Block",
              "src": "5205:49:40",
              "statements": [
                {
                  "expression": {
                    "id": 33068,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33066,
                      "name": "fundsRecipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33030,
                      "src": "5215:14:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 33067,
                      "name": "_fundsRecipient",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33060,
                      "src": "5232:15:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5215:32:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 33069,
                  "nodeType": "ExpressionStatement",
                  "src": "5215:32:40"
                }
              ]
            },
            "documentation": {
              "id": 33056,
              "nodeType": "StructuredDocumentation",
              "src": "5058:41:40",
              "text": "============ Constructor ============"
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 33063,
                    "name": "_bridgeRouter",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 33058,
                    "src": "5186:13:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 33064,
                "modifierName": {
                  "id": 33062,
                  "name": "NFTAccountant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 33021,
                  "src": "5172:13:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_NFTAccountant_$33021_$",
                    "typeString": "type(contract NFTAccountant)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5172:28:40"
              }
            ],
            "name": "",
            "parameters": {
              "id": 33061,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33058,
                  "mutability": "mutable",
                  "name": "_bridgeRouter",
                  "nodeType": "VariableDeclaration",
                  "scope": 33071,
                  "src": "5116:21:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33057,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5116:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33060,
                  "mutability": "mutable",
                  "name": "_fundsRecipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 33071,
                  "src": "5139:23:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33059,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5139:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5115:48:40"
            },
            "returnParameters": {
              "id": 33065,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5205:0:40"
            },
            "scope": 33330,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 33110,
            "nodeType": "FunctionDefinition",
            "src": "5735:439:40",
            "body": {
              "id": 33109,
              "nodeType": "Block",
              "src": "5975:199:40",
              "statements": [
                {
                  "expression": {
                    "id": 33089,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33085,
                      "name": "_totalAffected",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33077,
                      "src": "5985:14:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 33086,
                        "name": "totalAffected",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32620,
                        "src": "6002:13:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33088,
                      "indexExpression": {
                        "id": 33087,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33074,
                        "src": "6016:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6002:21:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5985:38:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33090,
                  "nodeType": "ExpressionStatement",
                  "src": "5985:38:40"
                },
                {
                  "expression": {
                    "id": 33095,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33091,
                      "name": "_totalMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33079,
                      "src": "6033:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 33092,
                        "name": "totalMinted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32843,
                        "src": "6048:11:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33094,
                      "indexExpression": {
                        "id": 33093,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33074,
                        "src": "6060:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6048:19:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6033:34:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33096,
                  "nodeType": "ExpressionStatement",
                  "src": "6033:34:40"
                },
                {
                  "expression": {
                    "id": 33101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33097,
                      "name": "_totalCollected",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33081,
                      "src": "6077:15:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 33098,
                        "name": "totalCollected",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33035,
                        "src": "6095:14:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33100,
                      "indexExpression": {
                        "id": 33099,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33074,
                        "src": "6110:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6095:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6077:40:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33102,
                  "nodeType": "ExpressionStatement",
                  "src": "6077:40:40"
                },
                {
                  "expression": {
                    "id": 33107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33103,
                      "name": "_totalRecovered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33083,
                      "src": "6127:15:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 33104,
                        "name": "totalRecovered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33040,
                        "src": "6145:14:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33106,
                      "indexExpression": {
                        "id": 33105,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33074,
                        "src": "6160:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6145:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6127:40:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33108,
                  "nodeType": "ExpressionStatement",
                  "src": "6127:40:40"
                }
              ]
            },
            "documentation": {
              "id": 33072,
              "nodeType": "StructuredDocumentation",
              "src": "5260:470:40",
              "text": " @notice Return all pertinent state information for an asset in a single RPC call for convenience\n @return _totalAffected total amount of tokens affected\n @return _totalMinted total amount minted in NFTs from unbridging this\n         asset\n @return _totalCollected lifetime total amount of this asset that has\n         passed through the account\n @return _totalRecovered total amount of this asset recovered by users"
            },
            "functionSelector": "8b0dcb4e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "assetInfo",
            "parameters": {
              "id": 33075,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33074,
                  "mutability": "mutable",
                  "name": "_asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 33110,
                  "src": "5754:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33073,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5754:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5753:16:40"
            },
            "returnParameters": {
              "id": 33084,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33077,
                  "mutability": "mutable",
                  "name": "_totalAffected",
                  "nodeType": "VariableDeclaration",
                  "scope": 33110,
                  "src": "5830:22:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33076,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5830:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33079,
                  "mutability": "mutable",
                  "name": "_totalMinted",
                  "nodeType": "VariableDeclaration",
                  "scope": 33110,
                  "src": "5866:20:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33078,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5866:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33081,
                  "mutability": "mutable",
                  "name": "_totalCollected",
                  "nodeType": "VariableDeclaration",
                  "scope": 33110,
                  "src": "5900:23:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33080,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5900:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33083,
                  "mutability": "mutable",
                  "name": "_totalRecovered",
                  "nodeType": "VariableDeclaration",
                  "scope": 33110,
                  "src": "5937:23:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33082,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5937:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5816:154:40"
            },
            "scope": 33330,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33150,
            "nodeType": "FunctionDefinition",
            "src": "6279:314:40",
            "body": {
              "id": 33149,
              "nodeType": "Block",
              "src": "6347:246:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 33124,
                        "name": "fundsRecipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33030,
                        "src": "6385:14:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 33125,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33115,
                        "src": "6401:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 33121,
                            "name": "_asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33113,
                            "src": "6364:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 33120,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27517,
                          "src": "6357:6:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$27517_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 33122,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6357:14:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$27517",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 33123,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27551,
                      "src": "6357:27:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$27517_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$27517_$",
                        "typeString": "function (contract IERC20,address,uint256)"
                      }
                    },
                    "id": 33126,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6357:52:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33127,
                  "nodeType": "ExpressionStatement",
                  "src": "6357:52:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 33145,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 33135,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "6473:4:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_NFTRecoveryAccountant_$33330",
                                    "typeString": "contract NFTRecoveryAccountant"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_NFTRecoveryAccountant_$33330",
                                    "typeString": "contract NFTRecoveryAccountant"
                                  }
                                ],
                                "id": 33134,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "6465:7:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 33133,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "6465:7:40",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 33136,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6465:13:40",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 33130,
                                  "name": "_asset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 33113,
                                  "src": "6447:6:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 33129,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 27517,
                                "src": "6440:6:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$27517_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 33131,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6440:14:40",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$27517",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 33132,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 27456,
                            "src": "6440:24:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 33137,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6440:39:40",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 33144,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 33138,
                              "name": "totalCollected",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33035,
                              "src": "6499:14:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 33140,
                            "indexExpression": {
                              "id": 33139,
                              "name": "_asset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33113,
                              "src": "6514:6:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6499:22:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "baseExpression": {
                              "id": 33141,
                              "name": "totalRecovered",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33040,
                              "src": "6524:14:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 33143,
                            "indexExpression": {
                              "id": 33142,
                              "name": "_asset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33113,
                              "src": "6539:6:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6524:22:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6499:47:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6440:106:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "2172656d6f766520616d6f756e74",
                        "id": 33146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6560:16:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5c81af08775acf6ac1b1fe680523b34d92c547561aa78734a592045d9d5a2561",
                          "typeString": "literal_string \"!remove amount\""
                        },
                        "value": "!remove amount"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5c81af08775acf6ac1b1fe680523b34d92c547561aa78734a592045d9d5a2561",
                          "typeString": "literal_string \"!remove amount\""
                        }
                      ],
                      "id": 33128,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6419:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 33147,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6419:167:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33148,
                  "nodeType": "ExpressionStatement",
                  "src": "6419:167:40"
                }
              ]
            },
            "documentation": {
              "id": 33111,
              "nodeType": "StructuredDocumentation",
              "src": "6180:94:40",
              "text": " @notice Remove funds that should not have been transferred to this contract"
            },
            "functionSelector": "abe7f1ab",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 33118,
                "modifierName": {
                  "id": 33117,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "6337:9:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6337:9:40"
              }
            ],
            "name": "remove",
            "parameters": {
              "id": 33116,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33113,
                  "mutability": "mutable",
                  "name": "_asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 33150,
                  "src": "6295:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33112,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6295:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33115,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 33150,
                  "src": "6311:15:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33114,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6311:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6294:33:40"
            },
            "returnParameters": {
              "id": 33119,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6347:0:40"
            },
            "scope": 33330,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33181,
            "nodeType": "FunctionDefinition",
            "src": "6955:334:40",
            "body": {
              "id": 33180,
              "nodeType": "Block",
              "src": "7072:217:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 33166,
                        "name": "_handler",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33153,
                        "src": "7170:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 33169,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "7188:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NFTRecoveryAccountant_$33330",
                              "typeString": "contract NFTRecoveryAccountant"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_NFTRecoveryAccountant_$33330",
                              "typeString": "contract NFTRecoveryAccountant"
                            }
                          ],
                          "id": 33168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7180:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 33167,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "7180:7:40",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 33170,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7180:13:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 33171,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33157,
                        "src": "7195:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 33163,
                            "name": "_asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33155,
                            "src": "7145:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 33162,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27517,
                          "src": "7138:6:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$27517_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 33164,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7138:14:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$27517",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 33165,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27576,
                      "src": "7138:31:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$27517_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$27517_$",
                        "typeString": "function (contract IERC20,address,address,uint256)"
                      }
                    },
                    "id": 33172,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7138:65:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33173,
                  "nodeType": "ExpressionStatement",
                  "src": "7138:65:40"
                },
                {
                  "expression": {
                    "id": 33178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 33174,
                        "name": "totalCollected",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33035,
                        "src": "7249:14:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33176,
                      "indexExpression": {
                        "id": 33175,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33155,
                        "src": "7264:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7249:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 33177,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33157,
                      "src": "7275:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7249:33:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33179,
                  "nodeType": "ExpressionStatement",
                  "src": "7249:33:40"
                }
              ]
            },
            "documentation": {
              "id": 33151,
              "nodeType": "StructuredDocumentation",
              "src": "6599:351:40",
              "text": " @notice Collect funds to be recovered by users\n @param _handler address handling tokens\n @param _asset token to make available to recover\n @param _amount amount to make available to recover\n @dev Prior to the contract owner calling this method,\n the _handler must Approve this contract to spend _amount"
            },
            "functionSelector": "c8fea2fb",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 33160,
                "modifierName": {
                  "id": 33159,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "7062:9:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7062:9:40"
              }
            ],
            "name": "collect",
            "parameters": {
              "id": 33158,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33153,
                  "mutability": "mutable",
                  "name": "_handler",
                  "nodeType": "VariableDeclaration",
                  "scope": 33181,
                  "src": "6981:16:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33152,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6981:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33155,
                  "mutability": "mutable",
                  "name": "_asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 33181,
                  "src": "7007:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33154,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7007:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33157,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 33181,
                  "src": "7031:15:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33156,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7031:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6971:81:40"
            },
            "returnParameters": {
              "id": 33161,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7072:0:40"
            },
            "scope": 33330,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33207,
            "nodeType": "FunctionDefinition",
            "src": "7410:214:40",
            "body": {
              "id": 33206,
              "nodeType": "Block",
              "src": "7474:150:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 33191,
                            "name": "_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33184,
                            "src": "7500:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 33190,
                          "name": "_exists",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24233,
                          "src": "7492:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 33192,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7492:12:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "7265636f76657261626c653a206e6f6e6578697374656e7420746f6b656e",
                        "id": 33193,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7506:32:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b7c71d2114c5c2444107e37a623361679edc2674127329eae7e1482a865c6ecc",
                          "typeString": "literal_string \"recoverable: nonexistent token\""
                        },
                        "value": "recoverable: nonexistent token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b7c71d2114c5c2444107e37a623361679edc2674127329eae7e1482a865c6ecc",
                          "typeString": "literal_string \"recoverable: nonexistent token\""
                        }
                      ],
                      "id": 33189,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7484:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 33194,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7484:55:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33195,
                  "nodeType": "ExpressionStatement",
                  "src": "7484:55:40"
                },
                {
                  "assignments": [
                    33197
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33197,
                      "mutability": "mutable",
                      "name": "_rec",
                      "nodeType": "VariableDeclaration",
                      "scope": 33206,
                      "src": "7549:18:40",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                        "typeString": "struct NFTAccountant.Record"
                      },
                      "typeName": {
                        "id": 33196,
                        "name": "Record",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 32830,
                        "src": "7549:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage_ptr",
                          "typeString": "struct NFTAccountant.Record"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33201,
                  "initialValue": {
                    "baseExpression": {
                      "id": 33198,
                      "name": "records",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32838,
                      "src": "7570:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                        "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                      }
                    },
                    "id": 33200,
                    "indexExpression": {
                      "id": 33199,
                      "name": "_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33184,
                      "src": "7578:3:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7570:12:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Record_$32830_storage",
                      "typeString": "struct NFTAccountant.Record storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7549:33:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 33203,
                        "name": "_rec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33197,
                        "src": "7612:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                          "typeString": "struct NFTAccountant.Record memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                          "typeString": "struct NFTAccountant.Record memory"
                        }
                      ],
                      "id": 33202,
                      "name": "_recoverable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33329,
                      "src": "7599:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Record_$32830_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct NFTAccountant.Record memory) view returns (uint256)"
                      }
                    },
                    "id": 33204,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7599:18:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 33188,
                  "id": 33205,
                  "nodeType": "Return",
                  "src": "7592:25:40"
                }
              ]
            },
            "documentation": {
              "id": 33182,
              "nodeType": "StructuredDocumentation",
              "src": "7295:110:40",
              "text": " @notice The current total amount of funds that can be recovered by a\n         tokenId"
            },
            "functionSelector": "00c12c31",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "recoverable",
            "parameters": {
              "id": 33185,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33184,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 33207,
                  "src": "7431:11:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33183,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7431:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7430:13:40"
            },
            "returnParameters": {
              "id": 33188,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33187,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33207,
                  "src": "7465:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33186,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7465:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7464:9:40"
            },
            "scope": 33330,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 33283,
            "nodeType": "FunctionDefinition",
            "src": "7689:725:40",
            "body": {
              "id": 33282,
              "nodeType": "Block",
              "src": "7729:685:40",
              "statements": [
                {
                  "assignments": [
                    33214
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33214,
                      "mutability": "mutable",
                      "name": "_user",
                      "nodeType": "VariableDeclaration",
                      "scope": 33282,
                      "src": "7739:13:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 33213,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7739:7:40",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33218,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 33216,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33210,
                        "src": "7763:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 33215,
                      "name": "ownerOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23850,
                      "src": "7755:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (uint256) view returns (address)"
                      }
                    },
                    "id": 33217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7755:12:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7739:28:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 33223,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 33220,
                          "name": "_user",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33214,
                          "src": "7785:5:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 33221,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "7794:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 33222,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "7794:10:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "7785:19:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6f6e6c79204e465420686f6c6465722063616e207265636f766572",
                        "id": 33224,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7806:29:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c27fed9b3e7ccd95fea5cbb11193a3c55d73886c9d1ae4eeb886a2bb349b4f01",
                          "typeString": "literal_string \"only NFT holder can recover\""
                        },
                        "value": "only NFT holder can recover"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c27fed9b3e7ccd95fea5cbb11193a3c55d73886c9d1ae4eeb886a2bb349b4f01",
                          "typeString": "literal_string \"only NFT holder can recover\""
                        }
                      ],
                      "id": 33219,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7777:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 33225,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7777:59:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33226,
                  "nodeType": "ExpressionStatement",
                  "src": "7777:59:40"
                },
                {
                  "assignments": [
                    33228
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33228,
                      "mutability": "mutable",
                      "name": "_rec",
                      "nodeType": "VariableDeclaration",
                      "scope": 33282,
                      "src": "7894:18:40",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                        "typeString": "struct NFTAccountant.Record"
                      },
                      "typeName": {
                        "id": 33227,
                        "name": "Record",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 32830,
                        "src": "7894:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage_ptr",
                          "typeString": "struct NFTAccountant.Record"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33232,
                  "initialValue": {
                    "baseExpression": {
                      "id": 33229,
                      "name": "records",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32838,
                      "src": "7915:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                        "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                      }
                    },
                    "id": 33231,
                    "indexExpression": {
                      "id": 33230,
                      "name": "_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33210,
                      "src": "7923:3:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7915:12:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Record_$32830_storage",
                      "typeString": "struct NFTAccountant.Record storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7894:33:40"
                },
                {
                  "assignments": [
                    33234
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33234,
                      "mutability": "mutable",
                      "name": "_amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 33282,
                      "src": "7937:15:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 33233,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7937:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33238,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 33236,
                        "name": "_rec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33228,
                        "src": "7968:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                          "typeString": "struct NFTAccountant.Record memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                          "typeString": "struct NFTAccountant.Record memory"
                        }
                      ],
                      "id": 33235,
                      "name": "_recoverable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33329,
                      "src": "7955:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Record_$32830_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct NFTAccountant.Record memory) view returns (uint256)"
                      }
                    },
                    "id": 33237,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7955:18:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7937:36:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 33242,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 33240,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33234,
                          "src": "7991:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 33241,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8002:1:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7991:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "63757272656e746c792066756c6c79207265636f7665726564",
                        "id": 33243,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8005:27:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c4b6d4979f599c1a8ea52a2c024b77add8160179d134a49973267d704910584a",
                          "typeString": "literal_string \"currently fully recovered\""
                        },
                        "value": "currently fully recovered"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c4b6d4979f599c1a8ea52a2c024b77add8160179d134a49973267d704910584a",
                          "typeString": "literal_string \"currently fully recovered\""
                        }
                      ],
                      "id": 33239,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7983:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 33244,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7983:50:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33245,
                  "nodeType": "ExpressionStatement",
                  "src": "7983:50:40"
                },
                {
                  "assignments": [
                    33247
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33247,
                      "mutability": "mutable",
                      "name": "_asset",
                      "nodeType": "VariableDeclaration",
                      "scope": 33282,
                      "src": "8121:14:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 33246,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "8121:7:40",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33250,
                  "initialValue": {
                    "expression": {
                      "id": 33248,
                      "name": "_rec",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33228,
                      "src": "8138:4:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                        "typeString": "struct NFTAccountant.Record memory"
                      }
                    },
                    "id": 33249,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "asset",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 32823,
                    "src": "8138:10:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8121:27:40"
                },
                {
                  "expression": {
                    "id": 33255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 33251,
                        "name": "totalRecovered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33040,
                        "src": "8158:14:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33253,
                      "indexExpression": {
                        "id": 33252,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33247,
                        "src": "8173:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8158:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 33254,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33234,
                      "src": "8184:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8158:33:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33256,
                  "nodeType": "ExpressionStatement",
                  "src": "8158:33:40"
                },
                {
                  "expression": {
                    "id": 33265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 33257,
                          "name": "records",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32838,
                          "src": "8201:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                            "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                          }
                        },
                        "id": 33259,
                        "indexExpression": {
                          "id": 33258,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33210,
                          "src": "8209:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8201:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage",
                          "typeString": "struct NFTAccountant.Record storage ref"
                        }
                      },
                      "id": 33260,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "recovered",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32829,
                      "src": "8201:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 33263,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33234,
                          "src": "8234:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 33262,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8227:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint96_$",
                          "typeString": "type(uint96)"
                        },
                        "typeName": {
                          "id": 33261,
                          "name": "uint96",
                          "nodeType": "ElementaryTypeName",
                          "src": "8227:6:40",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 33264,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8227:15:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      }
                    },
                    "src": "8201:41:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "id": 33266,
                  "nodeType": "ExpressionStatement",
                  "src": "8201:41:40"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 33268,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33210,
                        "src": "8288:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 33269,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33247,
                        "src": "8293:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 33270,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33214,
                        "src": "8301:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 33271,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33234,
                        "src": "8308:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 33267,
                      "name": "Recovery",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33055,
                      "src": "8279:8:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,address,address,uint256)"
                      }
                    },
                    "id": 33272,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8279:37:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33273,
                  "nodeType": "EmitStatement",
                  "src": "8274:42:40"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 33278,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33214,
                        "src": "8392:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 33279,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33234,
                        "src": "8399:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 33275,
                            "name": "_asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33247,
                            "src": "8371:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 33274,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27517,
                          "src": "8364:6:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$27517_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 33276,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8364:14:40",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$27517",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 33277,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27551,
                      "src": "8364:27:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$27517_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$27517_$",
                        "typeString": "function (contract IERC20,address,uint256)"
                      }
                    },
                    "id": 33280,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8364:43:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33281,
                  "nodeType": "ExpressionStatement",
                  "src": "8364:43:40"
                }
              ]
            },
            "documentation": {
              "id": 33208,
              "nodeType": "StructuredDocumentation",
              "src": "7630:54:40",
              "text": " @notice Recover the available funds"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_recover",
            "parameters": {
              "id": 33211,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33210,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 33283,
                  "src": "7707:11:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33209,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7707:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7706:13:40"
            },
            "returnParameters": {
              "id": 33212,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7729:0:40"
            },
            "scope": 33330,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 33329,
            "nodeType": "FunctionDefinition",
            "src": "8511:460:40",
            "body": {
              "id": 33328,
              "nodeType": "Block",
              "src": "8585:386:40",
              "statements": [
                {
                  "assignments": [
                    33292
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33292,
                      "mutability": "mutable",
                      "name": "_totalRecoverable",
                      "nodeType": "VariableDeclaration",
                      "scope": 33328,
                      "src": "8595:25:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 33291,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8595:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33309,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 33308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 33302,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 33293,
                              "name": "totalCollected",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33035,
                              "src": "8624:14:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 33296,
                            "indexExpression": {
                              "expression": {
                                "id": 33294,
                                "name": "_rec",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 33286,
                                "src": "8639:4:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                                  "typeString": "struct NFTAccountant.Record memory"
                                }
                              },
                              "id": 33295,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "asset",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 32823,
                              "src": "8639:10:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8624:26:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 33299,
                                  "name": "_rec",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 33286,
                                  "src": "8673:4:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                                    "typeString": "struct NFTAccountant.Record memory"
                                  }
                                },
                                "id": 33300,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "amount",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 32825,
                                "src": "8673:11:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint96",
                                  "typeString": "uint96"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint96",
                                  "typeString": "uint96"
                                }
                              ],
                              "id": 33298,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8665:7:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 33297,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "8665:7:40",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 33301,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8665:20:40",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8624:61:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 33303,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "8623:63:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "baseExpression": {
                        "id": 33304,
                        "name": "totalAffected",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32620,
                        "src": "8689:13:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 33307,
                      "indexExpression": {
                        "expression": {
                          "id": 33305,
                          "name": "_rec",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33286,
                          "src": "8703:4:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                            "typeString": "struct NFTAccountant.Record memory"
                          }
                        },
                        "id": 33306,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "asset",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 32823,
                        "src": "8703:10:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "8689:25:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8623:91:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8595:119:40"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 33316,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 33310,
                      "name": "_totalRecoverable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33292,
                      "src": "8777:17:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 33313,
                            "name": "_rec",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33286,
                            "src": "8805:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                              "typeString": "struct NFTAccountant.Record memory"
                            }
                          },
                          "id": 33314,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "recovered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32829,
                          "src": "8805:14:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        ],
                        "id": 33312,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8797:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 33311,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8797:7:40",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 33315,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8797:23:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8777:43:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 33319,
                  "nodeType": "IfStatement",
                  "src": "8773:57:40",
                  "trueBody": {
                    "expression": {
                      "hexValue": "30",
                      "id": 33317,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8829:1:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 33290,
                    "id": 33318,
                    "nodeType": "Return",
                    "src": "8822:8:40"
                  }
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 33326,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 33320,
                      "name": "_totalRecoverable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33292,
                      "src": "8921:17:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 33323,
                            "name": "_rec",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33286,
                            "src": "8949:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                              "typeString": "struct NFTAccountant.Record memory"
                            }
                          },
                          "id": 33324,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "recovered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32829,
                          "src": "8949:14:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        ],
                        "id": 33322,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8941:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 33321,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8941:7:40",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 33325,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8941:23:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8921:43:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 33290,
                  "id": 33327,
                  "nodeType": "Return",
                  "src": "8914:50:40"
                }
              ]
            },
            "documentation": {
              "id": 33284,
              "nodeType": "StructuredDocumentation",
              "src": "8420:86:40",
              "text": " @notice The current total amount of funds recoverable for a tokenId"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_recoverable",
            "parameters": {
              "id": 33287,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33286,
                  "mutability": "mutable",
                  "name": "_rec",
                  "nodeType": "VariableDeclaration",
                  "scope": 33329,
                  "src": "8533:18:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                    "typeString": "struct NFTAccountant.Record"
                  },
                  "typeName": {
                    "id": 33285,
                    "name": "Record",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 32830,
                    "src": "8533:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Record_$32830_storage_ptr",
                      "typeString": "struct NFTAccountant.Record"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8532:20:40"
            },
            "returnParameters": {
              "id": 33290,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33289,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 33329,
                  "src": "8576:7:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33288,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8576:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8575:9:40"
            },
            "scope": 33330,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 33023,
              "name": "NFTAccountant",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 33021,
              "src": "4112:13:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NFTAccountant_$33021",
                "typeString": "contract NFTAccountant"
              }
            },
            "id": 33024,
            "nodeType": "InheritanceSpecifier",
            "src": "4112:13:40"
          }
        ],
        "contractDependencies": [
          23168,
          23243,
          23255,
          23676,
          24650,
          24681,
          24708,
          24842,
          25131,
          32803,
          33021,
          33635
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 33022,
          "nodeType": "StructuredDocumentation",
          "src": "4036:33:40",
          "text": "@title NFTRecoveryAccountant"
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          33330,
          33021,
          23168,
          24650,
          24681,
          24708,
          24842,
          23243,
          23255,
          25131,
          23676,
          32803,
          33635
        ],
        "name": "NFTRecoveryAccountant",
        "scope": 33523
      },
      {
        "id": 33522,
        "nodeType": "ContractDefinition",
        "src": "9014:2757:40",
        "nodes": [
          {
            "id": 33338,
            "nodeType": "VariableDeclaration",
            "src": "9132:41:40",
            "constant": false,
            "documentation": {
              "id": 33334,
              "nodeType": "StructuredDocumentation",
              "src": "9085:42:40",
              "text": "@notice Maps address to allowed status"
            },
            "functionSelector": "2848aeaf",
            "mutability": "mutable",
            "name": "allowList",
            "scope": 33522,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 33337,
              "keyType": {
                "id": 33335,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "9140:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "9132:24:40",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 33336,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "9151:4:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 33342,
            "nodeType": "VariableDeclaration",
            "src": "9256:25:40",
            "constant": false,
            "mutability": "mutable",
            "name": "__GAP",
            "scope": 33522,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$49_storage",
              "typeString": "uint256[49]"
            },
            "typeName": {
              "baseType": {
                "id": 33339,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "9256:7:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 33341,
              "length": {
                "hexValue": "3439",
                "id": 33340,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "9264:2:40",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_49_by_1",
                  "typeString": "int_const 49"
                },
                "value": "49"
              },
              "nodeType": "ArrayTypeName",
              "src": "9256:11:40",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$49_storage_ptr",
                "typeString": "uint256[49]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 33354,
            "nodeType": "FunctionDefinition",
            "src": "9288:128:40",
            "body": {
              "id": 33353,
              "nodeType": "Block",
              "src": "9414:2:40",
              "statements": []
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 33349,
                    "name": "_bridgeRouter",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 33344,
                    "src": "9378:13:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "id": 33350,
                    "name": "_fundsRecipient",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 33346,
                    "src": "9393:15:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 33351,
                "modifierName": {
                  "id": 33348,
                  "name": "NFTRecoveryAccountant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 33330,
                  "src": "9356:21:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_NFTRecoveryAccountant_$33330_$",
                    "typeString": "type(contract NFTRecoveryAccountant)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9356:53:40"
              }
            ],
            "name": "",
            "parameters": {
              "id": 33347,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33344,
                  "mutability": "mutable",
                  "name": "_bridgeRouter",
                  "nodeType": "VariableDeclaration",
                  "scope": 33354,
                  "src": "9300:21:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33343,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9300:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33346,
                  "mutability": "mutable",
                  "name": "_fundsRecipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 33354,
                  "src": "9323:23:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33345,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9323:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9299:48:40"
            },
            "returnParameters": {
              "id": 33352,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9414:0:40"
            },
            "scope": 33522,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 33367,
            "nodeType": "ModifierDefinition",
            "src": "9500:96:40",
            "body": {
              "id": 33366,
              "nodeType": "Block",
              "src": "9523:73:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "id": 33358,
                          "name": "allowList",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33338,
                          "src": "9541:9:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 33361,
                        "indexExpression": {
                          "expression": {
                            "id": 33359,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "9551:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 33360,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "9551:10:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9541:21:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6e6f7420616c6c6f776564",
                        "id": 33362,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9564:13:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5c0608e7a428ea07a0c4c9bb0791749812cfeb8bc4b0e031d134a099a0e13dcb",
                          "typeString": "literal_string \"not allowed\""
                        },
                        "value": "not allowed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5c0608e7a428ea07a0c4c9bb0791749812cfeb8bc4b0e031d134a099a0e13dcb",
                          "typeString": "literal_string \"not allowed\""
                        }
                      ],
                      "id": 33357,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9533:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 33363,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9533:45:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33364,
                  "nodeType": "ExpressionStatement",
                  "src": "9533:45:40"
                },
                {
                  "id": 33365,
                  "nodeType": "PlaceholderStatement",
                  "src": "9588:1:40"
                }
              ]
            },
            "documentation": {
              "id": 33355,
              "nodeType": "StructuredDocumentation",
              "src": "9422:73:40",
              "text": " @notice Requires that `msg.sender` is on the allowList"
            },
            "name": "onlyAllowed",
            "parameters": {
              "id": 33356,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9520:2:40"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 33380,
            "nodeType": "FunctionDefinition",
            "src": "9669:81:40",
            "body": {
              "id": 33379,
              "nodeType": "Block",
              "src": "9720:30:40",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 33376,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33370,
                        "src": "9739:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 33375,
                      "name": "_recover",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33283,
                      "src": "9730:8:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 33377,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9730:13:40",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 33378,
                  "nodeType": "ExpressionStatement",
                  "src": "9730:13:40"
                }
              ]
            },
            "documentation": {
              "id": 33368,
              "nodeType": "StructuredDocumentation",
              "src": "9602:62:40",
              "text": " @notice Recover available funds for the NFT"
            },
            "functionSelector": "0ca35682",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 33373,
                "modifierName": {
                  "id": 33372,
                  "name": "onlyAllowed",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 33367,
                  "src": "9708:11:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9708:11:40"
              }
            ],
            "name": "recover",
            "parameters": {
              "id": 33371,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33370,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 33380,
                  "src": "9686:11:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33369,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9686:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9685:13:40"
            },
            "returnParameters": {
              "id": 33374,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9720:0:40"
            },
            "scope": 33522,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33411,
            "nodeType": "FunctionDefinition",
            "src": "9868:167:40",
            "body": {
              "id": 33410,
              "nodeType": "Block",
              "src": "9927:108:40",
              "statements": [
                {
                  "body": {
                    "id": 33408,
                    "nodeType": "Block",
                    "src": "9979:50:40",
                    "statements": [
                      {
                        "expression": {
                          "id": 33406,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 33400,
                              "name": "allowList",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33338,
                              "src": "9993:9:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 33404,
                            "indexExpression": {
                              "baseExpression": {
                                "id": 33401,
                                "name": "_who",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 33384,
                                "src": "10003:4:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 33403,
                              "indexExpression": {
                                "id": 33402,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 33390,
                                "src": "10008:1:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10003:7:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "9993:18:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 33405,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10014:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "9993:25:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 33407,
                        "nodeType": "ExpressionStatement",
                        "src": "9993:25:40"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 33396,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 33393,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33390,
                      "src": "9957:1:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 33394,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33384,
                        "src": "9961:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 33395,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "9961:11:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9957:15:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 33409,
                  "initializationExpression": {
                    "assignments": [
                      33390
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 33390,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 33409,
                        "src": "9942:9:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 33389,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9942:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 33392,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 33391,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9954:1:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "9942:13:40"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 33398,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "9974:3:40",
                      "subExpression": {
                        "id": 33397,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33390,
                        "src": "9974:1:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 33399,
                    "nodeType": "ExpressionStatement",
                    "src": "9974:3:40"
                  },
                  "nodeType": "ForStatement",
                  "src": "9937:92:40"
                }
              ]
            },
            "documentation": {
              "id": 33381,
              "nodeType": "StructuredDocumentation",
              "src": "9756:107:40",
              "text": " @notice Adds addresses to the allow list\n @param _who A list of addresses to allow"
            },
            "functionSelector": "987c5ced",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 33387,
                "modifierName": {
                  "id": 33386,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "9917:9:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9917:9:40"
              }
            ],
            "name": "allow",
            "parameters": {
              "id": 33385,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33384,
                  "mutability": "mutable",
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 33411,
                  "src": "9883:23:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 33382,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "9883:7:40",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 33383,
                    "nodeType": "ArrayTypeName",
                    "src": "9883:9:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9882:25:40"
            },
            "returnParameters": {
              "id": 33388,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9927:0:40"
            },
            "scope": 33522,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33442,
            "nodeType": "FunctionDefinition",
            "src": "10161:171:40",
            "body": {
              "id": 33441,
              "nodeType": "Block",
              "src": "10223:109:40",
              "statements": [
                {
                  "body": {
                    "id": 33439,
                    "nodeType": "Block",
                    "src": "10275:51:40",
                    "statements": [
                      {
                        "expression": {
                          "id": 33437,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 33431,
                              "name": "allowList",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 33338,
                              "src": "10289:9:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 33435,
                            "indexExpression": {
                              "baseExpression": {
                                "id": 33432,
                                "name": "_who",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 33415,
                                "src": "10299:4:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 33434,
                              "indexExpression": {
                                "id": 33433,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 33421,
                                "src": "10304:1:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10299:7:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "10289:18:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "66616c7365",
                            "id": 33436,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10310:5:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "10289:26:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 33438,
                        "nodeType": "ExpressionStatement",
                        "src": "10289:26:40"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 33427,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 33424,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33421,
                      "src": "10253:1:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 33425,
                        "name": "_who",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33415,
                        "src": "10257:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 33426,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "10257:11:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10253:15:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 33440,
                  "initializationExpression": {
                    "assignments": [
                      33421
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 33421,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 33440,
                        "src": "10238:9:40",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 33420,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10238:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 33423,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 33422,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10250:1:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "10238:13:40"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 33429,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "10270:3:40",
                      "subExpression": {
                        "id": 33428,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33421,
                        "src": "10270:1:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 33430,
                    "nodeType": "ExpressionStatement",
                    "src": "10270:3:40"
                  },
                  "nodeType": "ForStatement",
                  "src": "10233:93:40"
                }
              ]
            },
            "documentation": {
              "id": 33412,
              "nodeType": "StructuredDocumentation",
              "src": "10041:115:40",
              "text": " @notice Removes addresses from the allow list\n @param _who A list of addresses to disallow"
            },
            "functionSelector": "ca091ef3",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 33418,
                "modifierName": {
                  "id": 33417,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "10213:9:40",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10213:9:40"
              }
            ],
            "name": "disallow",
            "parameters": {
              "id": 33416,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33415,
                  "mutability": "mutable",
                  "name": "_who",
                  "nodeType": "VariableDeclaration",
                  "scope": 33442,
                  "src": "10179:23:40",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 33413,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "10179:7:40",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 33414,
                    "nodeType": "ArrayTypeName",
                    "src": "10179:9:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10178:25:40"
            },
            "returnParameters": {
              "id": 33419,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10223:0:40"
            },
            "scope": 33522,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 33521,
            "nodeType": "FunctionDefinition",
            "src": "11065:704:40",
            "body": {
              "id": 33520,
              "nodeType": "Block",
              "src": "11409:360:40",
              "statements": [
                {
                  "expression": {
                    "id": 33468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33464,
                      "name": "_holder",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33448,
                      "src": "11419:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 33466,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33445,
                          "src": "11437:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 33465,
                        "name": "ownerOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23850,
                        "src": "11429:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                          "typeString": "function (uint256) view returns (address)"
                        }
                      },
                      "id": 33467,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11429:12:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "11419:22:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 33469,
                  "nodeType": "ExpressionStatement",
                  "src": "11419:22:40"
                },
                {
                  "expression": {
                    "id": 33474,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33470,
                      "name": "_isAllowed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33450,
                      "src": "11451:10:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 33471,
                        "name": "allowList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33338,
                        "src": "11464:9:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 33473,
                      "indexExpression": {
                        "id": 33472,
                        "name": "_holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33448,
                        "src": "11474:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "11464:18:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11451:31:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 33475,
                  "nodeType": "ExpressionStatement",
                  "src": "11451:31:40"
                },
                {
                  "expression": {
                    "id": 33480,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33476,
                      "name": "_uri",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33452,
                      "src": "11492:4:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 33478,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33445,
                          "src": "11508:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 33477,
                        "name": "tokenURI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23938,
                        "src": "11499:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_string_memory_ptr_$",
                          "typeString": "function (uint256) view returns (string memory)"
                        }
                      },
                      "id": 33479,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11499:13:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "11492:20:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "id": 33481,
                  "nodeType": "ExpressionStatement",
                  "src": "11492:20:40"
                },
                {
                  "assignments": [
                    33483
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 33483,
                      "mutability": "mutable",
                      "name": "_rec",
                      "nodeType": "VariableDeclaration",
                      "scope": 33520,
                      "src": "11522:18:40",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                        "typeString": "struct NFTAccountant.Record"
                      },
                      "typeName": {
                        "id": 33482,
                        "name": "Record",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 32830,
                        "src": "11522:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_storage_ptr",
                          "typeString": "struct NFTAccountant.Record"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 33487,
                  "initialValue": {
                    "baseExpression": {
                      "id": 33484,
                      "name": "records",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32838,
                      "src": "11543:7:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$32830_storage_$",
                        "typeString": "mapping(uint256 => struct NFTAccountant.Record storage ref)"
                      }
                    },
                    "id": 33486,
                    "indexExpression": {
                      "id": 33485,
                      "name": "_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33445,
                      "src": "11551:3:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11543:12:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Record_$32830_storage",
                      "typeString": "struct NFTAccountant.Record storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11522:33:40"
                },
                {
                  "expression": {
                    "id": 33491,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33488,
                      "name": "_asset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33454,
                      "src": "11565:6:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 33489,
                        "name": "_rec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33483,
                        "src": "11574:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                          "typeString": "struct NFTAccountant.Record memory"
                        }
                      },
                      "id": 33490,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "asset",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32823,
                      "src": "11574:10:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "11565:19:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 33492,
                  "nodeType": "ExpressionStatement",
                  "src": "11565:19:40"
                },
                {
                  "expression": {
                    "id": 33499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33493,
                      "name": "_originalAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33456,
                      "src": "11594:15:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 33496,
                            "name": "_rec",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33483,
                            "src": "11620:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                              "typeString": "struct NFTAccountant.Record memory"
                            }
                          },
                          "id": 33497,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "amount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32825,
                          "src": "11620:11:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        ],
                        "id": 33495,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "11612:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 33494,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11612:7:40",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 33498,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11612:20:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11594:38:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33500,
                  "nodeType": "ExpressionStatement",
                  "src": "11594:38:40"
                },
                {
                  "expression": {
                    "id": 33504,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33501,
                      "name": "_originalUser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33458,
                      "src": "11642:13:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 33502,
                        "name": "_rec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33483,
                        "src": "11658:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                          "typeString": "struct NFTAccountant.Record memory"
                        }
                      },
                      "id": 33503,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "originalUser",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32827,
                      "src": "11658:17:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "11642:33:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 33505,
                  "nodeType": "ExpressionStatement",
                  "src": "11642:33:40"
                },
                {
                  "expression": {
                    "id": 33512,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33506,
                      "name": "_recovered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33460,
                      "src": "11685:10:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 33509,
                            "name": "_rec",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33483,
                            "src": "11706:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Record_$32830_memory_ptr",
                              "typeString": "struct NFTAccountant.Record memory"
                            }
                          },
                          "id": 33510,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "recovered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32829,
                          "src": "11706:14:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        ],
                        "id": 33508,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "11698:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 33507,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11698:7:40",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 33511,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11698:23:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11685:36:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33513,
                  "nodeType": "ExpressionStatement",
                  "src": "11685:36:40"
                },
                {
                  "expression": {
                    "id": 33518,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 33514,
                      "name": "_recoverable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33462,
                      "src": "11731:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 33516,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33445,
                          "src": "11758:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 33515,
                        "name": "recoverable",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33207,
                        "src": "11746:11:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256) view returns (uint256)"
                        }
                      },
                      "id": 33517,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11746:16:40",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11731:31:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 33519,
                  "nodeType": "ExpressionStatement",
                  "src": "11731:31:40"
                }
              ]
            },
            "documentation": {
              "id": 33443,
              "nodeType": "StructuredDocumentation",
              "src": "10338:722:40",
              "text": " @notice Return all pertinent state information for a tokenId in a single\n         RPC call for convenience\n @return _holder address of the current token holder\n @return _isAllowed TRUE if the current token holder is set on the\n         allowlist & can therefore call recovery\n @return _uri the tokenURI for the NFT\n @return _asset address of the ERC20 asset for this NFT\n @return _originalAmount amount of the bridge transfer which minted this\n         NFT\n @return _originalUser original recipient of the NFT\n @return _recovered total amount recovered thus far from this NFT\n @return _recoverable current amount recoverable for this NFT"
            },
            "functionSelector": "2e340599",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "info",
            "parameters": {
              "id": 33446,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33445,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11079:11:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33444,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11079:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11078:13:40"
            },
            "returnParameters": {
              "id": 33463,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 33448,
                  "mutability": "mutable",
                  "name": "_holder",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11152:15:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33447,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11152:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33450,
                  "mutability": "mutable",
                  "name": "_isAllowed",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11181:15:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 33449,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11181:4:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33452,
                  "mutability": "mutable",
                  "name": "_uri",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11210:18:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 33451,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "11210:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33454,
                  "mutability": "mutable",
                  "name": "_asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11242:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33453,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11242:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33456,
                  "mutability": "mutable",
                  "name": "_originalAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11270:23:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33455,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11270:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33458,
                  "mutability": "mutable",
                  "name": "_originalUser",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11307:21:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 33457,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11307:7:40",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33460,
                  "mutability": "mutable",
                  "name": "_recovered",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11342:18:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33459,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11342:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 33462,
                  "mutability": "mutable",
                  "name": "_recoverable",
                  "nodeType": "VariableDeclaration",
                  "scope": 33521,
                  "src": "11374:20:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 33461,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11374:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11138:266:40"
            },
            "scope": 33522,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 33332,
              "name": "NFTRecoveryAccountant",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 33330,
              "src": "9057:21:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NFTRecoveryAccountant_$33330",
                "typeString": "contract NFTRecoveryAccountant"
              }
            },
            "id": 33333,
            "nodeType": "InheritanceSpecifier",
            "src": "9057:21:40"
          }
        ],
        "contractDependencies": [
          23168,
          23243,
          23255,
          23676,
          24650,
          24681,
          24708,
          24842,
          25131,
          32803,
          33021,
          33330,
          33635
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 33331,
          "nodeType": "StructuredDocumentation",
          "src": "8975:39:40",
          "text": "@title AllowListRecoveryAccountant"
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          33522,
          33330,
          33021,
          23168,
          24650,
          24681,
          24708,
          24842,
          23243,
          23255,
          25131,
          23676,
          32803,
          33635
        ],
        "name": "AllowListNFTRecoveryAccountant",
        "scope": 33523
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 40
}