{
  "abi": [
    {
      "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": false,
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "name": "log",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "log_address",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "val",
          "type": "uint256[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "int256[]",
          "name": "val",
          "type": "int256[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "val",
          "type": "address[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "log_bytes",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "log_bytes32",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "name": "log_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "val",
          "type": "address"
        }
      ],
      "name": "log_named_address",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "val",
          "type": "uint256[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256[]",
          "name": "val",
          "type": "int256[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "val",
          "type": "address[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "val",
          "type": "bytes"
        }
      ],
      "name": "log_named_bytes",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "val",
          "type": "bytes32"
        }
      ],
      "name": "log_named_bytes32",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "val",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "decimals",
          "type": "uint256"
        }
      ],
      "name": "log_named_decimal_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "val",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "decimals",
          "type": "uint256"
        }
      ],
      "name": "log_named_decimal_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "val",
          "type": "int256"
        }
      ],
      "name": "log_named_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "val",
          "type": "string"
        }
      ],
      "name": "log_named_string",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "val",
          "type": "uint256"
        }
      ],
      "name": "log_named_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "name": "log_string",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "log_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "logs",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "AFFECTED_TOKEN_AMOUNT",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "IS_SCRIPT",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "IS_TEST",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "failed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "recordCheck",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setUp",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_dontMintMoreThanAffected",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_dontMintRandomAsset",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_initValues",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_mintTwoDifferentAssets",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_mintTwoDifferentUser",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_mintTwoSameUser",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_noTransfers",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_recordCheck",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "vm",
      "outputs": [
        {
          "internalType": "contract Vm",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x608060408190526000805462ff00001960ff1990911660011716620100001781556001625e79b760e01b03198252606f608452737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160a491602091602490829087803b15801561006857600080fd5b505af115801561007c573d6000803e3d6000fd5b505050506040513d602081101561009257600080fd5b5051600a80546001600160a01b0319166001600160a01b03909216919091179055617d00600b553480156100c557600080fd5b506183ba80620000d66000396000f3fe60806040523480156200001157600080fd5b50600436106200010c5760003560e01c80637fab495011620000a5578063d559c890116200006f578063d559c89014620001d0578063dc2d1d5a14620001da578063f8ccbf4714620001e4578063fa7626d414620001ee576200010c565b80637fab495014620001945780639d99ec16146200019e578063a021789a14620001a8578063ba414fa614620001b2576200010c565b8063446692b411620000e7578063446692b4146200015a5780634a0f652e1462000164578063591ddb27146200016e57806362527e1b1462000178576200010c565b80630a9254e414620001115780631326b0c2146200011d5780633a7684631462000127575b600080fd5b6200011b620001f8565b005b6200011b62000595565b620001316200070c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6200011b62000724565b6200011b6200072e565b6200011b62000738565b6200018262000e1f565b60408051918252519081900360200190f35b6200011b62000e27565b6200011b62000f6f565b6200011b620010e9565b620001bc62001611565b604080519115158252519081900360200190f35b6200011b6200184f565b6200011b6200193f565b620001bc620020eb565b620001bc620020fa565b600a54604051309173ffffffffffffffffffffffffffffffffffffffff1690620002229062002670565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604080519182900301906000f08015801562000263573d6000803e3d6000fd5b50600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790819055604080517f8129fc1c00000000000000000000000000000000000000000000000000000000815290519190921691638129fc1c91600480830192600092919082900301818387803b158015620002fc57600080fd5b505af115801562000311573d6000803e3d6000fd5b5050604080517fffa186490000000000000000000000000000000000000000000000000000000081526201606260048201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d935063ffa18649925060248083019260209291908290030181600087803b1580156200038557600080fd5b505af11580156200039a573d6000803e3d6000fd5b505050506040513d6020811015620003b157600080fd5b5051600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790556040516001906000906200040b906200267e565b73ffffffffffffffffffffffffffffffffffffffff909216604080840191909152606083019190915260808083526004908301527f46616b650000000000000000000000000000000000000000000000000000000060a083015260c0602083018190526002908301527f464b00000000000000000000000000000000000000000000000000000000000060e0830152519081900361010001906000f080158015620004ba573d6000803e3d6000fd5b50600c805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161791829055600880549091169183169190911790819055600d54604080517f8855751500000000000000000000000000000000000000000000000000000000815292841660048401526305f5e10060248401525192169163885575159160448082019260009290919082900301818387803b1580156200057a57600080fd5b505af11580156200058f573d6000803e3d6000fd5b50505050565b6200059f6200193f565b604080517fffa1864900000000000000000000000000000000000000000000000000000000815261303960048201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160248083019260209291908290030181600087803b1580156200060e57600080fd5b505af115801562000623573d6000803e3d6000fd5b505050506040513d60208110156200063a57600080fd5b5051600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790819055600d54604080517f8855751500000000000000000000000000000000000000000000000000000000815292841660048401526305f5e10060248401525192169163885575159160448082019260009290919082900301818387803b158015620006e757600080fd5b505af1158015620006fc573d6000803e3d6000fd5b505050506200070a6200193f565b565b737109709ecfa91a80626ff3989d68f67f5b1dd12d81565b6200070a6200193f565b620007246200193f565b620007426200193f565b600954604080517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015251737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015620007c757600080fd5b505af1158015620007dc573d6000803e3d6000fd5b5050604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f207472616e7366657273000000000000000000000000000000000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250606480830192600092919082900301818387803b1580156200087a57600080fd5b505af11580156200088f573d6000803e3d6000fd5b5050600d54600954604080517fffa1864900000000000000000000000000000000000000000000000000000000815260636004820152905173ffffffffffffffffffffffffffffffffffffffff93841695506323b872dd94509290911691737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160248083019260209291908290030181600087803b1580156200092b57600080fd5b505af115801562000940573d6000803e3d6000fd5b505050506040513d60208110156200095757600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9384166004820152929091166024830152600060448301819052905160648084019382900301818387803b158015620009d357600080fd5b505af1158015620009e8573d6000803e3d6000fd5b5050604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f207472616e7366657273000000000000000000000000000000000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250606480830192600092919082900301818387803b15801562000a8657600080fd5b505af115801562000a9b573d6000803e3d6000fd5b5050600d54600954604080517fffa1864900000000000000000000000000000000000000000000000000000000815260636004820152905173ffffffffffffffffffffffffffffffffffffffff93841695506342842e0e94509290911691737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160248083019260209291908290030181600087803b15801562000b3757600080fd5b505af115801562000b4c573d6000803e3d6000fd5b505050506040513d602081101562000b6357600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9384166004820152929091166024830152600060448301819052905160648084019382900301818387803b15801562000bdf57600080fd5b505af115801562000bf4573d6000803e3d6000fd5b5050604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f207472616e7366657273000000000000000000000000000000000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250606480830192600092919082900301818387803b15801562000c9257600080fd5b505af115801562000ca7573d6000803e3d6000fd5b5050600d54600954604080517fffa1864900000000000000000000000000000000000000000000000000000000815260636004820152905173ffffffffffffffffffffffffffffffffffffffff938416955063b88d4fde94509290911691737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160248083019260209291908290030181600087803b15801562000d4357600080fd5b505af115801562000d58573d6000803e3d6000fd5b505050506040513d602081101562000d6f57600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260006044830181905260806064840152600660848401527f307831323334000000000000000000000000000000000000000000000000000060a4840152905160c48084019382900301818387803b1580156200057a57600080fd5b6305f5e10081565b630bebc200600b55604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6f7665726d696e7400000000000000000000000000000000000000000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391606480830192600092919082900301818387803b15801562000ec957600080fd5b505af115801562000ede573d6000803e3d6000fd5b5050600d54600854600954600b54604080517f172a93fb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9485166004820152928416602484015260448301919091525191909216935063172a93fb9250606480830192600092919082900301818387803b1580156200057a57600080fd5b604080517fffa18649000000000000000000000000000000000000000000000000000000008152606360048201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160248083019260209291908290030181600087803b15801562000fdd57600080fd5b505af115801562000ff2573d6000803e3d6000fd5b505050506040513d60208110156200100957600080fd5b5051600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091178155604080517ff28dceb30000000000000000000000000000000000000000000000000000000081526020600482015260248101929092527f6f7665726d696e74000000000000000000000000000000000000000000000000604483015251737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391606480830192600092919082900301818387803b15801562000ec957600080fd5b600d54604080517f8da5cb5b00000000000000000000000000000000000000000000000000000000815290516200118c9273ffffffffffffffffffffffffffffffffffffffff1691638da5cb5b916004808301926020929190829003018186803b1580156200115757600080fd5b505afa1580156200116c573d6000803e3d6000fd5b505050506040513d60208110156200118357600080fd5b50513062002103565b600d54604080517f41af5b520000000000000000000000000000000000000000000000000000000081529051620011fa9273ffffffffffffffffffffffffffffffffffffffff16916341af5b52916004808301926020929190829003018186803b1580156200115757600080fd5b600d54604080517f1e96917d00000000000000000000000000000000000000000000000000000000815290516200129e9273ffffffffffffffffffffffffffffffffffffffff1691631e96917d916004808301926020929190829003018186803b1580156200126857600080fd5b505afa1580156200127d573d6000803e3d6000fd5b505050506040513d60208110156200129457600080fd5b5051600062002287565b600d54600854604080517e3d479000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152905162001319939290921691623d479091602480820192602092909190829003018186803b1580156200126857600080fd5b600d54604080517f344610670000000000000000000000000000000000000000000000000000000081526000600482018190529151919283928392839273ffffffffffffffffffffffffffffffffffffffff1691633446106791602480820192608092909190829003018186803b1580156200139457600080fd5b505afa158015620013a9573d6000803e3d6000fd5b505050506040513d6080811015620013c057600080fd5b5080516020820151604083015160609093015191965094509092509050620013ea84600062002103565b62001405836bffffffffffffffffffffffff16600062002287565b6200141282600062002103565b6200142d816bffffffffffffffffffffffff16600062002287565b600d54600854604080517fe271f8e300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529051620014e393929092169163e271f8e391602480820192602092909190829003018186803b158015620014aa57600080fd5b505afa158015620014bf573d6000803e3d6000fd5b505050506040513d6020811015620014d657600080fd5b50516305f5e10062002287565b600d54600854604080517f6c26763300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152905162001594939290921691636c26763391602480820192602092909190829003018186803b1580156200156057600080fd5b505afa15801562001575573d6000803e3d6000fd5b505050506040513d60208110156200158c57600080fd5b5051620023b1565b600d54600854604080517fbf799f2b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015290516200058f93929092169163bf799f2b91602480820192602092909190829003018186803b1580156200126857600080fd5b60008054610100900460ff1615620016355750600054610100900460ff166200184c565b60006200164162002424565b15620018495760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d60208083018290527f6661696c6564000000000000000000000000000000000000000000000000000083850152835180840385018152606084019094527f667f9d700000000000000000000000000000000000000000000000000000000060808401908152845160009593947f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49493608490910191908401908083835b602083106200173c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101620016fd565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b60208310620017c057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910162001781565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462001824576040519150601f19603f3d011682016040523d82523d6000602084013e62001829565b606091505b509150508080602001905160208110156200184357600080fd5b50519150505b90505b90565b620018596200193f565b604080517fffa1864900000000000000000000000000000000000000000000000000000000815261303960048201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160248083019260209291908290030181600087803b158015620018c857600080fd5b505af1158015620018dd573d6000803e3d6000fd5b505050506040513d6020811015620018f457600080fd5b5051600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790556200070a5b600d54604080517f1e96917d000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691631e96917d916004808301926020929190829003018186803b158015620019ab57600080fd5b505afa158015620019c0573d6000803e3d6000fd5b505050506040513d6020811015620019d757600080fd5b5051600d54600854604080517e3d479000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015290519394506000939190921691623d4790916024808301926020929190829003018186803b15801562001a5457600080fd5b505afa15801562001a69573d6000803e3d6000fd5b505050506040513d602081101562001a8057600080fd5b50516040517ff28dceb3000000000000000000000000000000000000000000000000000000008152602060048201908152602960248301819052929350737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f28dceb3928291604490910190620083608239604001915050600060405180830381600087803b15801562001b0857600080fd5b505af115801562001b1d573d6000803e3d6000fd5b5050600d54604080517f6352211e00000000000000000000000000000000000000000000000000000000815260048101879052905173ffffffffffffffffffffffffffffffffffffffff9092169350636352211e9250602480820192602092909190829003018186803b15801562001b9457600080fd5b505afa15801562001ba9573d6000803e3d6000fd5b505050506040513d602081101562001bc057600080fd5b5050600d54604080517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff909216608483015251737109709ecfa91a80626ff3989d68f67f5b1dd12d916381bad6f39160a480830192600092919082900301818387803b15801562001c6357600080fd5b505af115801562001c78573d6000803e3d6000fd5b5050600954600854600b54604080519182525173ffffffffffffffffffffffffffffffffffffffff938416955091909216925085917f72d16d2b2c30660a6bd00c67b3674217920a01054fcd02777011805372a50c80919081900360200190a4600d54600854600954600b54604080517f172a93fb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff94851660048201529284166024840152604483019190915251919092169163172a93fb91606480830192600092919082900301818387803b15801562001d6557600080fd5b505af115801562001d7a573d6000803e3d6000fd5b5050600d54604080517f6352211e00000000000000000000000000000000000000000000000000000000815260048101879052905162001e42945073ffffffffffffffffffffffffffffffffffffffff9092169250636352211e916024808301926020929190829003018186803b15801562001df557600080fd5b505afa15801562001e0a573d6000803e3d6000fd5b505050506040513d602081101562001e2157600080fd5b505160095473ffffffffffffffffffffffffffffffffffffffff1662002103565b600d54604080517f3446106700000000000000000000000000000000000000000000000000000000815260048101859052905160009283928392839273ffffffffffffffffffffffffffffffffffffffff16916334461067916024808301926080929190829003018186803b15801562001ebb57600080fd5b505afa15801562001ed0573d6000803e3d6000fd5b505050506040513d608081101562001ee757600080fd5b5080516020820151604083015160609093015160085492975090955091935090915062001f2c90859073ffffffffffffffffffffffffffffffffffffffff1662002103565b62001f48836bffffffffffffffffffffffff16600b5462002287565b60095462001f6e90839073ffffffffffffffffffffffffffffffffffffffff1662002103565b62001f89816bffffffffffffffffffffffff16600062002287565b600d54604080517f1e96917d00000000000000000000000000000000000000000000000000000000815290516200202f9273ffffffffffffffffffffffffffffffffffffffff1691631e96917d916004808301926020929190829003018186803b15801562001ff757600080fd5b505afa1580156200200c573d6000803e3d6000fd5b505050506040513d60208110156200202357600080fd5b50516001880162002287565b600d54600854604080517e3d479000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529051620020e3939290921691623d479091602480820192602092909190829003018186803b158015620020aa57600080fd5b505afa158015620020bf573d6000803e3d6000fd5b505050506040513d6020811015620020d657600080fd5b5051600b54870162002287565b505050505050565b60005462010000900460ff1681565b60005460ff1681565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462002283577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051808060200182810382526025815260200180620083896025913960400191505060405180910390a16040805173ffffffffffffffffffffffffffffffffffffffff83166020820152818152600a818301527f2020457870656374656400000000000000000000000000000000000000000000606082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a16040805173ffffffffffffffffffffffffffffffffffffffff84166020820152818152600a818301527f2020202041637475616c00000000000000000000000000000000000000000000606082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a1620022836200243f565b5050565b80821462002283577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040518080602001828103825260228152602001806200833e6022913960400191505060405180910390a16040805160208101839052818152600a818301527f2020457870656374656400000000000000000000000000000000000000000000606082015290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a16040805160208101849052818152600a818301527f2020202041637475616c00000000000000000000000000000000000000000000606082015290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a1620022836200243f565b8062002421576040805160208082526017908201527f4572726f723a20417373657274696f6e204661696c65640000000000000000008183015290517f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f509181900360600190a1620024216200243f565b50565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b151590565b6200244962002424565b15620026425760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d60208083018290527f6661696c6564000000000000000000000000000000000000000000000000000083850152600160608481019190915284518085039091018152608084019094527f70ca10bb0000000000000000000000000000000000000000000000000000000060a08401908152845160009593947f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc4949360a490910191908401908083835b602083106200255057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910162002511565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b60208310620025d457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910162002595565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462002638576040519150601f19603f3d011682016040523d82523d6000602084013e6200263d565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b614831806200268d83390190565b6114808062006ebe8339019056fe60c060405234801561001057600080fd5b5060405162004831380380620048318339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6147a66200008b6000398061135e5280611e075250806110fd528061138252506147a66000f3fe608060405234801561001057600080fd5b50600436106102e75760003560e01c80636c26763311610191578063abe7f1ab116100e3578063c8fea2fb11610097578063e985e9c511610071578063e985e9c514610be9578063f2fde38b14610c24578063f3f0531314610c57576102e7565b8063c8fea2fb14610b03578063ca091ef314610b46578063e271f8e314610bb6576102e7565b8063bf799f2b116100c8578063bf799f2b14610a96578063c698319814610ac9578063c87b56dd14610ae6576102e7565b8063abe7f1ab1461098a578063b88d4fde146109c3576102e7565b8063885575151161014557806395d89b411161011f57806395d89b41146108d7578063987c5ced146108df578063a22cb4651461094f576102e7565b8063885575151461083d5780638b0dcb4e146108765780638da5cb5b146108cf576102e7565b806370a082311161017657806370a08231146107fa578063715018a61461082d5780638129fc1c14610835576102e7565b80636c267633146107865780637013ca26146107b9576102e7565b806323b872dd1161024a5780633b6fd2cf116101fe5780634f6ccce7116101d85780634f6ccce7146107445780636352211e146107615780636c0360eb1461077e576102e7565b80633b6fd2cf1461073457806341af5b521461073c57806342842e0e1461050f576102e7565b80632e3405991161022f5780632e340599146105855780632f745c591461068f57806334461067146106c8576102e7565b806323b872dd1461050f5780632848aeaf14610552576102e7565b8063095ea7b3116102a1578063172a93fb11610286578063172a93fb146104bc57806318160ddd146104ff5780631e96917d14610507576102e7565b8063095ea7b3146104645780630ca356821461049f576102e7565b806301ffc9a7116102d257806301ffc9a71461034e57806306fdde03146103a1578063081812fc1461041e576102e7565b80623d4790146102ec578062c12c3114610331575b600080fd5b61031f6004803603602081101561030257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c8a565b60408051918252519081900360200190f35b61031f6004803603602081101561034757600080fd5b5035610c9c565b61038d6004803603602081101561036457600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610da3565b604080519115158252519081900360200190f35b6103a9610dda565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103e35781810151838201526020016103cb565b50505050905090810190601f1680156104105780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61043b6004803603602081101561043457600080fd5b5035610e8e565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61049d6004803603604081101561047a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f17565b005b61049d600480360360208110156104b557600080fd5b503561105a565b61049d600480360360608110156104d257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356110e5565b61031f611194565b61031f6111a5565b61049d6004803603606081101561052557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356111ab565b61038d6004803603602081101561056857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111b3565b6105a26004803603602081101561059b57600080fd5b50356111c9565b604051808973ffffffffffffffffffffffffffffffffffffffff1681526020018815158152602001806020018773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828103825288818151815260200191508051906020019080838360005b8381101561064d578181015183820152602001610635565b50505050905090810190601f16801561067a5780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b61031f600480360360408110156106a557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356112bf565b6106e5600480360360208110156106de57600080fd5b50356112f7565b6040805173ffffffffffffffffffffffffffffffffffffffff95861681526bffffffffffffffffffffffff94851660208201529290941682850152909116606082015290519081900360800190f35b61043b61135c565b61043b611380565b61031f6004803603602081101561075a57600080fd5b50356113a4565b61043b6004803603602081101561077757600080fd5b50356113ba565b6103a96113e2565b61038d6004803603602081101561079c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611461565b6107c161148b565b60405180826101c080838360005b838110156107e75781810151838201526020016107cf565b5050505090500191505060405180910390f35b61031f6004803603602081101561081057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611613565b61049d6116af565b61049d6117c6565b61049d6004803603604081101561085357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561199b565b6108a96004803603602081101561088c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166119c4565b604080519485526020850193909352838301919091526060830152519081900360800190f35b61043b611a0d565b6103a9611a29565b61049d600480360360208110156108f557600080fd5b81019060208101813564010000000081111561091057600080fd5b82018360208201111561092257600080fd5b8035906020019184602083028401116401000000008311171561094457600080fd5b509092509050611aa8565b61049d6004803603604081101561096557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515611bd2565b61049d600480360360408110156109a057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d43565b61049d600480360360808110156109d957600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359190810190608081016060820135640100000000811115610a2157600080fd5b820183602082011115610a3357600080fd5b80359060200191846001830284011164010000000083111715610a5557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f52945050505050565b61031f60048036036020811015610aac57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611f60565b61049d60048036036020811015610adf57600080fd5b50356110d9565b6103a960048036036020811015610afc57600080fd5b5035611f73565b61049d60048036036060811015610b1957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356122e0565b61049d60048036036020811015610b5c57600080fd5b810190602081018135640100000000811115610b7757600080fd5b820183602082011115610b8957600080fd5b80359060200191846020830284011164010000000083111715610bab57600080fd5b5090925090506123db565b61031f60048036036020811015610bcc57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612505565b61038d60048036036040811015610bff57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516612517565b61049d60048036036020811015610c3a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612552565b61031f60048036036020811015610c6d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166126f4565b60fd6020526000908152604090205481565b6000610ca782612707565b610d1257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f7265636f76657261626c653a206e6f6e6578697374656e7420746f6b656e0000604482015290519081900360640190fd5b600082815260fc60209081526040918290208251608081018452815473ffffffffffffffffffffffffffffffffffffffff80821683526bffffffffffffffffffffffff740100000000000000000000000000000000000000009283900481169584019590955260019093015492831694820194909452929004166060820152610d9a81612714565b9150505b919050565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526065602052604090205460ff1690565b609c8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e845780601f10610e5957610100808354040283529160200191610e84565b820191906000526020600020905b815481529060010190602001808311610e6757829003601f168201915b5050505050905090565b6000610e9982612707565b610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806146f4602c913960400191505060405180910390fd5b506000908152609a602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610f22826113ba565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fa9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061474f6021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610fc86127b1565b73ffffffffffffffffffffffffffffffffffffffff161480610ff65750610ff681610ff16127b1565b612517565b61104b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806146196038913960400191505060405180910390fd5b61105583836127b5565b505050565b33600090815261015f602052604090205460ff166110d957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420616c6c6f776564000000000000000000000000000000000000000000604482015290519081900360640190fd5b6110e281612855565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461118957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6f6e6c7920427269646765526f75746572000000000000000000000000000000604482015290519081900360640190fd5b611055838383612ab2565b60006111a06098612c4e565b905090565b60fb5481565b611055612c59565b61015f6020526000908152604090205460ff1681565b600080606060008060008060006111df896113ba565b73ffffffffffffffffffffffffffffffffffffffff8116600090815261015f602052604090205490985060ff16965061121789611f73565b60008a815260fc60209081526040918290208251608081018452815473ffffffffffffffffffffffffffffffffffffffff8082168084526bffffffffffffffffffffffff7401000000000000000000000000000000000000000093849004811696850187905260019095015491821696840187905291900490921660608201819052949a509098509096509094509092506112b18a610c9c565b915050919395975091939597565b73ffffffffffffffffffffffffffffffffffffffff821660009081526097602052604081206112ee9083612cc0565b90505b92915050565b60fc602052600090815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff808316926bffffffffffffffffffffffff740100000000000000000000000000000000000000009182900481169392831692919091041684565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806113b2609884612ccc565b509392505050565b60006112f18260405180606001604052806029815260200161467b6029913960989190612ce8565b609f8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e845780601f10610e5957610100808354040283529160200191610e84565b73ffffffffffffffffffffffffffffffffffffffff16600090815260208190526040902054151590565b6114936144b8565b50604080516101c081018252732260fac5e5542a773aa44fbcfedf7c193bc2c599815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2602082015273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489181019190915273853d955acef822db058eb8505911ed77f175b99e606082015273dac17f958d2ee523a2206206994597c13d831ec76080820152736b175474e89094c44da98b954eedeac495271d0f60a082015273d417144312dbf50465b1c641d016962017ef624060c0820152733d6f0dea3ac3c607b3998e6ce14b6350721752d960e08201527340eb746dee876ac1e78697b7ca85142d178a1fc861010082015273f1a91c7d44768070f711c68f33a7ca25c8d30268610120820152733432b6a60d23ca0dfca7761b7ab56459d9c964d0610140820152733431f91b3a388115f00c5ba9fdb899851d005fb561016082015273e5097d9baeafb89f9bcb78c9290d545db5f9e9cb61018082015273f1dc500fde233a4055e25e5bbf516372bc4f68716101a082015290565b600073ffffffffffffffffffffffffffffffffffffffff8216611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614651602a913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526097602052604090206112f190612c4e565b6116b76127b1565b73ffffffffffffffffffffffffffffffffffffffff166116d5611a0d565b73ffffffffffffffffffffffffffffffffffffffff161461175757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60c95460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360c980547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b603254610100900460ff16806117df57506117df612cff565b806117ed575060325460ff16155b611842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806146a4602e913960400191505060405180910390fd5b603254610100900460ff161580156118a857603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6118b0612d10565b6119246040518060400160405280600981526020017f4e6f6d6164204e465400000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f6e6f4e4654000000000000000000000000000000000000000000000000000000815250612fa1565b6119626040518060400160405280601681526020017f68747470733a2f2f6e66742e6e6f6d61642e78797a2f000000000000000000008152506130d0565b61196a6130e3565b80156110e257603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260208190526040902055565b73ffffffffffffffffffffffffffffffffffffffff166000908152602081815260408083205460fd83528184205461012d84528285205461012e90945291909320549293909290565b60c95473ffffffffffffffffffffffffffffffffffffffff1690565b609d8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e845780601f10610e5957610100808354040283529160200191610e84565b611ab06127b1565b73ffffffffffffffffffffffffffffffffffffffff16611ace611a0d565b73ffffffffffffffffffffffffffffffffffffffff1614611b5057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60005b8181101561105557600161015f6000858585818110611b6e57fe5b6020908102929092013573ffffffffffffffffffffffffffffffffffffffff1683525081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101611b53565b611bda6127b1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c7457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b80609b6000611c816127b1565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155611cf06127b1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b611d4b6127b1565b73ffffffffffffffffffffffffffffffffffffffff16611d69611a0d565b73ffffffffffffffffffffffffffffffffffffffff1614611deb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b611e2c73ffffffffffffffffffffffffffffffffffffffff83167f0000000000000000000000000000000000000000000000000000000000000000836131d5565b73ffffffffffffffffffffffffffffffffffffffff8216600081815261012e602090815260408083205461012d8352928190205481517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152915193900393926370a0823192602480840193919291829003018186803b158015611eb557600080fd5b505afa158015611ec9573d6000803e3d6000fd5b505050506040513d6020811015611edf57600080fd5b50511015611f4e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2172656d6f766520616d6f756e74000000000000000000000000000000000000604482015290519081900360640190fd5b5050565b611f5a612c59565b50505050565b61012e6020526000908152604090205481565b6060611f7e82612707565b611fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614720602f913960400191505060405180910390fd5b6000828152609e602090815260408083208054825160026001831615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190921691909104601f8101859004850282018501909352828152929091908301828280156120845780601f1061205957610100808354040283529160200191612084565b820191906000526020600020905b81548152906001019060200180831161206757829003601f168201915b5050505050905060006120956113e2565b90508051600014156120a957509050610d9e565b8151156121c45780826040516020018083805190602001908083835b6020831061210257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016120c5565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905285519190930192850191508083835b6020831061218657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612149565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050610d9e565b806121ce85613262565b6040516020018083805190602001908083835b6020831061221e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016121e1565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905285519190930192850191508083835b602083106122a257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612265565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b6122e86127b1565b73ffffffffffffffffffffffffffffffffffffffff16612306611a0d565b73ffffffffffffffffffffffffffffffffffffffff161461238857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6123aa73ffffffffffffffffffffffffffffffffffffffff831684308461338f565b73ffffffffffffffffffffffffffffffffffffffff909116600090815261012d602052604090208054909101905550565b6123e36127b1565b73ffffffffffffffffffffffffffffffffffffffff16612401611a0d565b73ffffffffffffffffffffffffffffffffffffffff161461248357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60005b8181101561105557600061015f60008585858181106124a157fe5b6020908102929092013573ffffffffffffffffffffffffffffffffffffffff1683525081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101612486565b60006020819052908152604090205481565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152609b6020908152604080832093909416825291909152205460ff1690565b61255a6127b1565b73ffffffffffffffffffffffffffffffffffffffff16612578611a0d565b73ffffffffffffffffffffffffffffffffffffffff16146125fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116612666576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806145cd6026913960400191505060405180910390fd5b60c95460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61012d6020526000908152604090205481565b60006112f1609883613424565b805173ffffffffffffffffffffffffffffffffffffffff90811660009081526020818152604080832054828601518651909516845261012d909252822054919283926bffffffffffffffffffffffff909116028161276e57fe5b04905082606001516bffffffffffffffffffffffff16811015612795576000915050610d9e565b60608301516bffffffffffffffffffffffff1690039050919050565b3390565b6000818152609a6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155819061280f826113ba565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612860826113ba565b905073ffffffffffffffffffffffffffffffffffffffff811633146128e657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6f6e6c79204e465420686f6c6465722063616e207265636f7665720000000000604482015290519081900360640190fd5b600082815260fc602090815260408083208151608081018352815473ffffffffffffffffffffffffffffffffffffffff80821683526bffffffffffffffffffffffff74010000000000000000000000000000000000000000928390048116968401969096526001909301549283169382019390935291900490911660608201529061297082612714565b9050806129de57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63757272656e746c792066756c6c79207265636f766572656400000000000000604482015290519081900360640190fd5b815173ffffffffffffffffffffffffffffffffffffffff808216600081815261012e6020908152604080832080548801905589835260fc82529182902060010180546bffffffffffffffffffffffff7401000000000000000000000000000000000000000080830482168a0190911602908616179055815186815291519388169389927f17d2c50d23ce305bb9110cc7ebdad11256efdcde5771581f8a57202e4eafaff692908290030190a4612aab73ffffffffffffffffffffffffffffffffffffffff821685846131d5565b5050505050565b60fb805460018101909155612ac78382613430565b600081815260fc6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8a81169182178116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8b160217845560019093018054909216928916929092179055835260fd80835281842080548701908190558484529190932054929091521115612be257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6f7665726d696e74000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16827f72d16d2b2c30660a6bd00c67b3674217920a01054fcd02777011805372a50c80856040518082815260200191505060405180910390a450505050565b60006112f18261344a565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f207472616e73666572730000000000000000000000000000000000000000604482015290519081900360640190fd5b60006112ee838361344e565b6000808080612cdb86866134cc565b9097909650945050505050565b6000612cf5848484613561565b90505b9392505050565b6000612d0a30613645565b15905090565b600060208190526417f117200f7ff0b998666205e50af945dcd5198861491334a6162cc24264d9a801634ee07ec8556904d7b58372297b8deaf97f2a11cb67ca5c7e99dba99b50e02c11472d0f19c22ed5af42a1599a7f57e1c7a455654f5aa599f7c07fc6521c8ea4247e8beb499344e591b9401fb2807ff9997dd598fd9e56c73a264d556a05873e2ff48e466ba2a59d7f27e997bcf7e34b5892c35718d72ca8a4d44f6f77265e19fe4feb6a8ebb16cc7b556507d8748182137fa934b07068f5d95a11413ed6d08a4a1122dc4b8c14a6ab2d94f8b279dac63042556a03c00b5742b19f454142857f5306b8fbe80b30a74098357ee8e26fad8dc069da9011cca5f0870a0a5982e541556a5dce3546a3de30fc55c6007f9cdb9ef8486d08aeebffa8fc9bbb85a20624c3ec8359d0fa1781366bd9aea8ad55699bf5a4d57a26c3c9d3b07f55813e084f33673b4b20bdc0331a65033a42722331e3f55a70ef815e1ddd4fb4556b01ab04465765b7c37a9b10007f65d12645f02a494bda192fbb7d0176b7df838fe8410c311663defbb56bfe7c28556a05f94e3dd1d341a8a949207fd50ff4d0ac27265152d143aec668d4c99a8fc77655d8a62125d1a4d3cd59087b55691692887ced913385b7807f541919c86040022d9e18ea6a255cd26949db2e27ffdd387787ea434611d53f44556a30a52129bcbbb1a75b6ac07f5f5fc63651242af2cb273d90cb6dd24751f30b6c885d12f328d3de3f13cba808556a09c3302fbb8195460740007f6fc1d9f3e3a05044d624fd126acdcb494d565eda599ac28936ba2e25ca06a62c5573f1dc500fde233a4055e25e5bbf516372bc4f6871905269444f9a32d89d50eec9647f9754ecc4659a29acf96c52a3094f54ed36634a7cb944ee6f2311c46b1437563355565b603254610100900460ff1680612fba5750612fba612cff565b80612fc8575060325460ff16155b61301d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806146a4602e913960400191505060405180910390fd5b603254610100900460ff1615801561308357603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b61308b61364b565b61309361375d565b61309d8383613868565b801561105557603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b8051611f4e90609f9060208401906144d7565b603254610100900460ff16806130fc57506130fc612cff565b8061310a575060325460ff16155b61315f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806146a4602e913960400191505060405180910390fd5b603254610100900460ff161580156131c557603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6131cd61364b565b61196a6139ed565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611055908490613b7d565b6060816132a3575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610d9e565b8160005b81156132bb57600101600a820491506132a7565b60008167ffffffffffffffff811180156132d457600080fd5b506040519080825280601f01601f1916602001820160405280156132ff576020820181803683370190505b5085935090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b831561338657600a840660300160f81b8282806001900393508151811061334c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350613329565b50949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611f5a908590613b7d565b60006112ee8383613c55565b611f4e828260405180602001604052806000815250613c6d565b5490565b815460009082106134aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806145796022913960400191505060405180910390fd5b8260000182815481106134b957fe5b9060005260206000200154905092915050565b81546000908190831061352a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806146d26022913960400191505060405180910390fd5b600084600001848154811061353b57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281613616576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135db5781810151838201526020016135c3565b50505050905090810190601f1680156136085780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061362957fe5b9060005260206000209060020201600101549150509392505050565b3b151590565b603254610100900460ff16806136645750613664612cff565b80613672575060325460ff16155b6136c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806146a4602e913960400191505060405180910390fd5b603254610100900460ff1615801561196a57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9091166101001716600117905580156110e257603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b603254610100900460ff16806137765750613776612cff565b80613784575060325460ff16155b6137d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806146a4602e913960400191505060405180910390fd5b603254610100900460ff1615801561383f57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b61196a7f01ffc9a700000000000000000000000000000000000000000000000000000000613cd9565b603254610100900460ff16806138815750613881612cff565b8061388f575060325460ff16155b6138e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806146a4602e913960400191505060405180910390fd5b603254610100900460ff1615801561394a57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b825161395d90609c9060208601906144d7565b50815161397190609d9060208501906144d7565b5061399b7f80ac58cd00000000000000000000000000000000000000000000000000000000613cd9565b6139c47f5b5e139f00000000000000000000000000000000000000000000000000000000613cd9565b61309d7f780e9d6300000000000000000000000000000000000000000000000000000000613cd9565b603254610100900460ff1680613a065750613a06612cff565b80613a14575060325460ff16155b613a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806146a4602e913960400191505060405180910390fd5b603254610100900460ff16158015613acf57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000613ad96127b1565b60c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156110e257603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b6000613bdf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613dc59092919063ffffffff16565b80519091501561105557808060200190516020811015613bfe57600080fd5b5051611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614770602a913960400191505060405180910390fd5b60009081526001919091016020526040902054151590565b613c778383613dd4565b613c846000848484613f5d565b611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061459b6032913960400191505060405180910390fd5b7fffffffff000000000000000000000000000000000000000000000000000000008082161415613d6a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b7fffffffff0000000000000000000000000000000000000000000000000000000016600090815260656020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6060612cf5848460008561416e565b73ffffffffffffffffffffffffffffffffffffffff8216613e5657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b613e5f81612707565b15613ecb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b613ed760008383611055565b73ffffffffffffffffffffffffffffffffffffffff82166000908152609760205260409020613f069082614328565b50613f1360988284614334565b50604051819073ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000613f7e8473ffffffffffffffffffffffffffffffffffffffff16613645565b613f8a57506001614166565b60006141027f150b7a0200000000000000000000000000000000000000000000000000000000613fb86127b1565b888787604051602401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614039578181015183820152602001614021565b50505050905090810190601f1680156140665780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405180606001604052806032815260200161459b6032913973ffffffffffffffffffffffffffffffffffffffff88169190613dc5565b9050600081806020019051602081101561411b57600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a020000000000000000000000000000000000000000000000000000000014925050505b949350505050565b6060824710156141c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806145f36026913960400191505060405180910390fd5b6141d285613645565b61423d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106142a657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614269565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614308576040519150601f19603f3d011682016040523d82523d6000602084013e61430d565b606091505b509150915061431d828286614357565b979650505050505050565b60006112ee83836143d7565b6000612cf5848473ffffffffffffffffffffffffffffffffffffffff8516614421565b60608315614366575081612cf8565b8251156143765782518084602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528451602484015284518593919283926044019190850190808383600083156135db5781810151838201526020016135c3565b60006143e38383613c55565b614419575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556112f1565b5060006112f1565b600082815260018401602052604081205480614486575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055612cf8565b8285600001600183038154811061449957fe5b9060005260206000209060020201600101819055506000915050612cf8565b604051806101c00160405280600e906020820280368337509192915050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261450d5760008555614553565b82601f1061452657805160ff1916838001178555614553565b82800160010185558215614553579182015b82811115614553578251825591602001919060010190614538565b5061455f929150614563565b5090565b5b8082111561455f576000815560010161456456fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a164736f6c6343000706000a60806040526040516200148038038062001480833981810160405260808110156200002957600080fd5b81019080805160405193929190846401000000008211156200004a57600080fd5b9083019060208201858111156200006057600080fd5b82516401000000008111828201881017156200007b57600080fd5b82525081516020918201929091019080838360005b83811015620000aa57818101518382015260200162000090565b50505050905090810190601f168015620000d85780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620000fc57600080fd5b9083019060208201858111156200011257600080fd5b82516401000000008111828201881017156200012d57600080fd5b82525081516020918201929091019080838360005b838110156200015c57818101518382015260200162000142565b50505050905090810190601f1680156200018a5780820380516001836020036101000a031916815260200191505b50604090815260208281015192909101518651929450925085918591620001b79160039185019062000369565b508051620001cd90600490602084019062000369565b50506005805460ff1916601217905550620001e98282620001f3565b5050505062000415565b6001600160a01b0382166200024f576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6200025d6000838362000302565b62000279816002546200030760201b620007d11790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620002ac918390620007d162000307821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b505050565b60008282018381101562000362576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620003a15760008555620003ec565b82601f10620003bc57805160ff1916838001178555620003ec565b82800160010185558215620003ec579182015b82811115620003ec578251825591602001919060010190620003cf565b50620003fa929150620003fe565b5090565b5b80821115620003fa5760008155600101620003ff565b61105b80620004256000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806340c10f19116100975780639dc29fac116100665780639dc29fac14610374578063a457c2d7146103ad578063a9059cbb146103e6578063dd62ed3e1461041f576100f5565b806340c10f19146102bd57806356189cb4146102f657806370a082311461033957806395d89b411461036c576100f5565b8063222f5be0116100d3578063222f5be0146101de57806323b872dd14610223578063313ce567146102665780633950935114610284576100f5565b806306fdde03146100fa578063095ea7b31461017757806318160ddd146101c4575b600080fd5b61010261045a565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561013c578181015183820152602001610124565b50505050905090810190601f1680156101695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b06004803603604081101561018d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561050e565b604080519115158252519081900360200190f35b6101cc61052b565b60408051918252519081900360200190f35b610221600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610531565b005b6101b06004803603606081101561023957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610541565b61026e6105e2565b6040805160ff9092168252519081900360200190f35b6101b06004803603604081101561029a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356105eb565b610221600480360360408110156102d357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610646565b6102216004803603606081101561030c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610654565b6101cc6004803603602081101561034f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661065f565b610102610687565b6102216004803603604081101561038a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610706565b6101b0600480360360408110156103c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610710565b6101b0600480360360408110156103fc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610785565b6101cc6004803603604081101561043557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610799565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105045780601f106104d957610100808354040283529160200191610504565b820191906000526020600020905b8154815290600101906020018083116104e757829003601f168201915b5050505050905090565b600061052261051b61084c565b8484610850565b50600192915050565b60025490565b61053c838383610997565b505050565b600061054e848484610997565b6105d88461055a61084c565b6105d385604051806060016040528060288152602001610f986028913973ffffffffffffffffffffffffffffffffffffffff8a166000908152600160205260408120906105a561084c565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549190610b67565b610850565b5060019392505050565b60055460ff1690565b60006105226105f861084c565b846105d3856001600061060961084c565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c1681529252902054906107d1565b6106508282610c18565b5050565b61053c838383610850565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105045780601f106104d957610100808354040283529160200191610504565b6106508282610d49565b600061052261071d61084c565b846105d38560405180606001604052806025815260200161102a602591396001600061074761084c565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d16815292529020549190610b67565b600061052261079261084c565b8484610997565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60008282018381101561084557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b73ffffffffffffffffffffffffffffffffffffffff83166108bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806110066024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610928576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180610f506022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610a03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180610fe16025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180610f0b6023913960400191505060405180910390fd5b610a7a83838361053c565b610ac481604051806060016040528060268152602001610f726026913973ffffffffffffffffffffffffffffffffffffffff86166000908152602081905260409020549190610b67565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610b0090826107d1565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610c10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610bd5578181015183820152602001610bbd565b50505050905090810190601f168015610c025780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8216610c9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610ca66000838361053c565b600254610cb390826107d1565b60025573ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054610ce690826107d1565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180610fc06021913960400191505060405180910390fd5b610dc18260008361053c565b610e0b81604051806060016040528060228152602001610f2e6022913973ffffffffffffffffffffffffffffffffffffffff85166000908152602081905260409020549190610b67565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902055600254610e3e9082610e93565b60025560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600082821115610f0457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa164736f6c6343000706000a4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e745d4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4572726f723a2061203d3d2062206e6f7420736174697366696564205b616464726573735da164736f6c6343000706000a",
    "sourceMap": "421:4047:51:-:0;;;;;1572:26:0;;;-1:-1:-1;;;;1572:26:0;;;1594:4;1572:26;170:28:1;;;;;-1:-1:-1;;;;;;519:12:51;;527:3;519:12;;250:64:1;;519:7:51;;:12;;;;;;421:4047;;250:64:1;519:12:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;519:12:51;499:32;;;-1:-1:-1;;;;;;499:32:51;-1:-1:-1;;;;;499:32:51;;;;;;;;;552:5;537:20;;421:4047;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x60806040523480156200001157600080fd5b50600436106200010c5760003560e01c80637fab495011620000a5578063d559c890116200006f578063d559c89014620001d0578063dc2d1d5a14620001da578063f8ccbf4714620001e4578063fa7626d414620001ee576200010c565b80637fab495014620001945780639d99ec16146200019e578063a021789a14620001a8578063ba414fa614620001b2576200010c565b8063446692b411620000e7578063446692b4146200015a5780634a0f652e1462000164578063591ddb27146200016e57806362527e1b1462000178576200010c565b80630a9254e414620001115780631326b0c2146200011d5780633a7684631462000127575b600080fd5b6200011b620001f8565b005b6200011b62000595565b620001316200070c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6200011b62000724565b6200011b6200072e565b6200011b62000738565b6200018262000e1f565b60408051918252519081900360200190f35b6200011b62000e27565b6200011b62000f6f565b6200011b620010e9565b620001bc62001611565b604080519115158252519081900360200190f35b6200011b6200184f565b6200011b6200193f565b620001bc620020eb565b620001bc620020fa565b600a54604051309173ffffffffffffffffffffffffffffffffffffffff1690620002229062002670565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604080519182900301906000f08015801562000263573d6000803e3d6000fd5b50600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790819055604080517f8129fc1c00000000000000000000000000000000000000000000000000000000815290519190921691638129fc1c91600480830192600092919082900301818387803b158015620002fc57600080fd5b505af115801562000311573d6000803e3d6000fd5b5050604080517fffa186490000000000000000000000000000000000000000000000000000000081526201606260048201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d935063ffa18649925060248083019260209291908290030181600087803b1580156200038557600080fd5b505af11580156200039a573d6000803e3d6000fd5b505050506040513d6020811015620003b157600080fd5b5051600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790556040516001906000906200040b906200267e565b73ffffffffffffffffffffffffffffffffffffffff909216604080840191909152606083019190915260808083526004908301527f46616b650000000000000000000000000000000000000000000000000000000060a083015260c0602083018190526002908301527f464b00000000000000000000000000000000000000000000000000000000000060e0830152519081900361010001906000f080158015620004ba573d6000803e3d6000fd5b50600c805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161791829055600880549091169183169190911790819055600d54604080517f8855751500000000000000000000000000000000000000000000000000000000815292841660048401526305f5e10060248401525192169163885575159160448082019260009290919082900301818387803b1580156200057a57600080fd5b505af11580156200058f573d6000803e3d6000fd5b50505050565b6200059f6200193f565b604080517fffa1864900000000000000000000000000000000000000000000000000000000815261303960048201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160248083019260209291908290030181600087803b1580156200060e57600080fd5b505af115801562000623573d6000803e3d6000fd5b505050506040513d60208110156200063a57600080fd5b5051600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790819055600d54604080517f8855751500000000000000000000000000000000000000000000000000000000815292841660048401526305f5e10060248401525192169163885575159160448082019260009290919082900301818387803b158015620006e757600080fd5b505af1158015620006fc573d6000803e3d6000fd5b505050506200070a6200193f565b565b737109709ecfa91a80626ff3989d68f67f5b1dd12d81565b6200070a6200193f565b620007246200193f565b620007426200193f565b600954604080517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909216600483015251737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015620007c757600080fd5b505af1158015620007dc573d6000803e3d6000fd5b5050604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f207472616e7366657273000000000000000000000000000000000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250606480830192600092919082900301818387803b1580156200087a57600080fd5b505af11580156200088f573d6000803e3d6000fd5b5050600d54600954604080517fffa1864900000000000000000000000000000000000000000000000000000000815260636004820152905173ffffffffffffffffffffffffffffffffffffffff93841695506323b872dd94509290911691737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160248083019260209291908290030181600087803b1580156200092b57600080fd5b505af115801562000940573d6000803e3d6000fd5b505050506040513d60208110156200095757600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9384166004820152929091166024830152600060448301819052905160648084019382900301818387803b158015620009d357600080fd5b505af1158015620009e8573d6000803e3d6000fd5b5050604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f207472616e7366657273000000000000000000000000000000000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250606480830192600092919082900301818387803b15801562000a8657600080fd5b505af115801562000a9b573d6000803e3d6000fd5b5050600d54600954604080517fffa1864900000000000000000000000000000000000000000000000000000000815260636004820152905173ffffffffffffffffffffffffffffffffffffffff93841695506342842e0e94509290911691737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160248083019260209291908290030181600087803b15801562000b3757600080fd5b505af115801562000b4c573d6000803e3d6000fd5b505050506040513d602081101562000b6357600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff9384166004820152929091166024830152600060448301819052905160648084019382900301818387803b15801562000bdf57600080fd5b505af115801562000bf4573d6000803e3d6000fd5b5050604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f207472616e7366657273000000000000000000000000000000000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250606480830192600092919082900301818387803b15801562000c9257600080fd5b505af115801562000ca7573d6000803e3d6000fd5b5050600d54600954604080517fffa1864900000000000000000000000000000000000000000000000000000000815260636004820152905173ffffffffffffffffffffffffffffffffffffffff938416955063b88d4fde94509290911691737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160248083019260209291908290030181600087803b15801562000d4357600080fd5b505af115801562000d58573d6000803e3d6000fd5b505050506040513d602081101562000d6f57600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260006044830181905260806064840152600660848401527f307831323334000000000000000000000000000000000000000000000000000060a4840152905160c48084019382900301818387803b1580156200057a57600080fd5b6305f5e10081565b630bebc200600b55604080517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6f7665726d696e7400000000000000000000000000000000000000000000000060448201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391606480830192600092919082900301818387803b15801562000ec957600080fd5b505af115801562000ede573d6000803e3d6000fd5b5050600d54600854600954600b54604080517f172a93fb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9485166004820152928416602484015260448301919091525191909216935063172a93fb9250606480830192600092919082900301818387803b1580156200057a57600080fd5b604080517fffa18649000000000000000000000000000000000000000000000000000000008152606360048201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160248083019260209291908290030181600087803b15801562000fdd57600080fd5b505af115801562000ff2573d6000803e3d6000fd5b505050506040513d60208110156200100957600080fd5b5051600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091178155604080517ff28dceb30000000000000000000000000000000000000000000000000000000081526020600482015260248101929092527f6f7665726d696e74000000000000000000000000000000000000000000000000604483015251737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391606480830192600092919082900301818387803b15801562000ec957600080fd5b600d54604080517f8da5cb5b00000000000000000000000000000000000000000000000000000000815290516200118c9273ffffffffffffffffffffffffffffffffffffffff1691638da5cb5b916004808301926020929190829003018186803b1580156200115757600080fd5b505afa1580156200116c573d6000803e3d6000fd5b505050506040513d60208110156200118357600080fd5b50513062002103565b600d54604080517f41af5b520000000000000000000000000000000000000000000000000000000081529051620011fa9273ffffffffffffffffffffffffffffffffffffffff16916341af5b52916004808301926020929190829003018186803b1580156200115757600080fd5b600d54604080517f1e96917d00000000000000000000000000000000000000000000000000000000815290516200129e9273ffffffffffffffffffffffffffffffffffffffff1691631e96917d916004808301926020929190829003018186803b1580156200126857600080fd5b505afa1580156200127d573d6000803e3d6000fd5b505050506040513d60208110156200129457600080fd5b5051600062002287565b600d54600854604080517e3d479000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152905162001319939290921691623d479091602480820192602092909190829003018186803b1580156200126857600080fd5b600d54604080517f344610670000000000000000000000000000000000000000000000000000000081526000600482018190529151919283928392839273ffffffffffffffffffffffffffffffffffffffff1691633446106791602480820192608092909190829003018186803b1580156200139457600080fd5b505afa158015620013a9573d6000803e3d6000fd5b505050506040513d6080811015620013c057600080fd5b5080516020820151604083015160609093015191965094509092509050620013ea84600062002103565b62001405836bffffffffffffffffffffffff16600062002287565b6200141282600062002103565b6200142d816bffffffffffffffffffffffff16600062002287565b600d54600854604080517fe271f8e300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529051620014e393929092169163e271f8e391602480820192602092909190829003018186803b158015620014aa57600080fd5b505afa158015620014bf573d6000803e3d6000fd5b505050506040513d6020811015620014d657600080fd5b50516305f5e10062002287565b600d54600854604080517f6c26763300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152905162001594939290921691636c26763391602480820192602092909190829003018186803b1580156200156057600080fd5b505afa15801562001575573d6000803e3d6000fd5b505050506040513d60208110156200158c57600080fd5b5051620023b1565b600d54600854604080517fbf799f2b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015290516200058f93929092169163bf799f2b91602480820192602092909190829003018186803b1580156200126857600080fd5b60008054610100900460ff1615620016355750600054610100900460ff166200184c565b60006200164162002424565b15620018495760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d60208083018290527f6661696c6564000000000000000000000000000000000000000000000000000083850152835180840385018152606084019094527f667f9d700000000000000000000000000000000000000000000000000000000060808401908152845160009593947f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49493608490910191908401908083835b602083106200173c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101620016fd565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b60208310620017c057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910162001781565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462001824576040519150601f19603f3d011682016040523d82523d6000602084013e62001829565b606091505b509150508080602001905160208110156200184357600080fd5b50519150505b90505b90565b620018596200193f565b604080517fffa1864900000000000000000000000000000000000000000000000000000000815261303960048201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160248083019260209291908290030181600087803b158015620018c857600080fd5b505af1158015620018dd573d6000803e3d6000fd5b505050506040513d6020811015620018f457600080fd5b5051600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790556200070a5b600d54604080517f1e96917d000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691631e96917d916004808301926020929190829003018186803b158015620019ab57600080fd5b505afa158015620019c0573d6000803e3d6000fd5b505050506040513d6020811015620019d757600080fd5b5051600d54600854604080517e3d479000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015290519394506000939190921691623d4790916024808301926020929190829003018186803b15801562001a5457600080fd5b505afa15801562001a69573d6000803e3d6000fd5b505050506040513d602081101562001a8057600080fd5b50516040517ff28dceb3000000000000000000000000000000000000000000000000000000008152602060048201908152602960248301819052929350737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f28dceb3928291604490910190620083608239604001915050600060405180830381600087803b15801562001b0857600080fd5b505af115801562001b1d573d6000803e3d6000fd5b5050600d54604080517f6352211e00000000000000000000000000000000000000000000000000000000815260048101879052905173ffffffffffffffffffffffffffffffffffffffff9092169350636352211e9250602480820192602092909190829003018186803b15801562001b9457600080fd5b505afa15801562001ba9573d6000803e3d6000fd5b505050506040513d602081101562001bc057600080fd5b5050600d54604080517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff909216608483015251737109709ecfa91a80626ff3989d68f67f5b1dd12d916381bad6f39160a480830192600092919082900301818387803b15801562001c6357600080fd5b505af115801562001c78573d6000803e3d6000fd5b5050600954600854600b54604080519182525173ffffffffffffffffffffffffffffffffffffffff938416955091909216925085917f72d16d2b2c30660a6bd00c67b3674217920a01054fcd02777011805372a50c80919081900360200190a4600d54600854600954600b54604080517f172a93fb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff94851660048201529284166024840152604483019190915251919092169163172a93fb91606480830192600092919082900301818387803b15801562001d6557600080fd5b505af115801562001d7a573d6000803e3d6000fd5b5050600d54604080517f6352211e00000000000000000000000000000000000000000000000000000000815260048101879052905162001e42945073ffffffffffffffffffffffffffffffffffffffff9092169250636352211e916024808301926020929190829003018186803b15801562001df557600080fd5b505afa15801562001e0a573d6000803e3d6000fd5b505050506040513d602081101562001e2157600080fd5b505160095473ffffffffffffffffffffffffffffffffffffffff1662002103565b600d54604080517f3446106700000000000000000000000000000000000000000000000000000000815260048101859052905160009283928392839273ffffffffffffffffffffffffffffffffffffffff16916334461067916024808301926080929190829003018186803b15801562001ebb57600080fd5b505afa15801562001ed0573d6000803e3d6000fd5b505050506040513d608081101562001ee757600080fd5b5080516020820151604083015160609093015160085492975090955091935090915062001f2c90859073ffffffffffffffffffffffffffffffffffffffff1662002103565b62001f48836bffffffffffffffffffffffff16600b5462002287565b60095462001f6e90839073ffffffffffffffffffffffffffffffffffffffff1662002103565b62001f89816bffffffffffffffffffffffff16600062002287565b600d54604080517f1e96917d00000000000000000000000000000000000000000000000000000000815290516200202f9273ffffffffffffffffffffffffffffffffffffffff1691631e96917d916004808301926020929190829003018186803b15801562001ff757600080fd5b505afa1580156200200c573d6000803e3d6000fd5b505050506040513d60208110156200202357600080fd5b50516001880162002287565b600d54600854604080517e3d479000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529051620020e3939290921691623d479091602480820192602092909190829003018186803b158015620020aa57600080fd5b505afa158015620020bf573d6000803e3d6000fd5b505050506040513d6020811015620020d657600080fd5b5051600b54870162002287565b505050505050565b60005462010000900460ff1681565b60005460ff1681565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462002283577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051808060200182810382526025815260200180620083896025913960400191505060405180910390a16040805173ffffffffffffffffffffffffffffffffffffffff83166020820152818152600a818301527f2020457870656374656400000000000000000000000000000000000000000000606082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a16040805173ffffffffffffffffffffffffffffffffffffffff84166020820152818152600a818301527f2020202041637475616c00000000000000000000000000000000000000000000606082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a1620022836200243f565b5050565b80821462002283577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040518080602001828103825260228152602001806200833e6022913960400191505060405180910390a16040805160208101839052818152600a818301527f2020457870656374656400000000000000000000000000000000000000000000606082015290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a16040805160208101849052818152600a818301527f2020202041637475616c00000000000000000000000000000000000000000000606082015290517fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a89181900360800190a1620022836200243f565b8062002421576040805160208082526017908201527f4572726f723a20417373657274696f6e204661696c65640000000000000000008183015290517f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f509181900360600190a1620024216200243f565b50565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b151590565b6200244962002424565b15620026425760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d60208083018290527f6661696c6564000000000000000000000000000000000000000000000000000083850152600160608481019190915284518085039091018152608084019094527f70ca10bb0000000000000000000000000000000000000000000000000000000060a08401908152845160009593947f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc4949360a490910191908401908083835b602083106200255057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910162002511565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b60208310620025d457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910162002595565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462002638576040519150601f19603f3d011682016040523d82523d6000602084013e6200263d565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b614831806200268d83390190565b6114808062006ebe8339019056fe60c060405234801561001057600080fd5b5060405162004831380380620048318339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6147a66200008b6000398061135e5280611e075250806110fd528061138252506147a66000f3fe608060405234801561001057600080fd5b50600436106102e75760003560e01c80636c26763311610191578063abe7f1ab116100e3578063c8fea2fb11610097578063e985e9c511610071578063e985e9c514610be9578063f2fde38b14610c24578063f3f0531314610c57576102e7565b8063c8fea2fb14610b03578063ca091ef314610b46578063e271f8e314610bb6576102e7565b8063bf799f2b116100c8578063bf799f2b14610a96578063c698319814610ac9578063c87b56dd14610ae6576102e7565b8063abe7f1ab1461098a578063b88d4fde146109c3576102e7565b8063885575151161014557806395d89b411161011f57806395d89b41146108d7578063987c5ced146108df578063a22cb4651461094f576102e7565b8063885575151461083d5780638b0dcb4e146108765780638da5cb5b146108cf576102e7565b806370a082311161017657806370a08231146107fa578063715018a61461082d5780638129fc1c14610835576102e7565b80636c267633146107865780637013ca26146107b9576102e7565b806323b872dd1161024a5780633b6fd2cf116101fe5780634f6ccce7116101d85780634f6ccce7146107445780636352211e146107615780636c0360eb1461077e576102e7565b80633b6fd2cf1461073457806341af5b521461073c57806342842e0e1461050f576102e7565b80632e3405991161022f5780632e340599146105855780632f745c591461068f57806334461067146106c8576102e7565b806323b872dd1461050f5780632848aeaf14610552576102e7565b8063095ea7b3116102a1578063172a93fb11610286578063172a93fb146104bc57806318160ddd146104ff5780631e96917d14610507576102e7565b8063095ea7b3146104645780630ca356821461049f576102e7565b806301ffc9a7116102d257806301ffc9a71461034e57806306fdde03146103a1578063081812fc1461041e576102e7565b80623d4790146102ec578062c12c3114610331575b600080fd5b61031f6004803603602081101561030257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c8a565b60408051918252519081900360200190f35b61031f6004803603602081101561034757600080fd5b5035610c9c565b61038d6004803603602081101561036457600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610da3565b604080519115158252519081900360200190f35b6103a9610dda565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103e35781810151838201526020016103cb565b50505050905090810190601f1680156104105780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61043b6004803603602081101561043457600080fd5b5035610e8e565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61049d6004803603604081101561047a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f17565b005b61049d600480360360208110156104b557600080fd5b503561105a565b61049d600480360360608110156104d257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356110e5565b61031f611194565b61031f6111a5565b61049d6004803603606081101561052557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356111ab565b61038d6004803603602081101561056857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111b3565b6105a26004803603602081101561059b57600080fd5b50356111c9565b604051808973ffffffffffffffffffffffffffffffffffffffff1681526020018815158152602001806020018773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828103825288818151815260200191508051906020019080838360005b8381101561064d578181015183820152602001610635565b50505050905090810190601f16801561067a5780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b61031f600480360360408110156106a557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356112bf565b6106e5600480360360208110156106de57600080fd5b50356112f7565b6040805173ffffffffffffffffffffffffffffffffffffffff95861681526bffffffffffffffffffffffff94851660208201529290941682850152909116606082015290519081900360800190f35b61043b61135c565b61043b611380565b61031f6004803603602081101561075a57600080fd5b50356113a4565b61043b6004803603602081101561077757600080fd5b50356113ba565b6103a96113e2565b61038d6004803603602081101561079c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611461565b6107c161148b565b60405180826101c080838360005b838110156107e75781810151838201526020016107cf565b5050505090500191505060405180910390f35b61031f6004803603602081101561081057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611613565b61049d6116af565b61049d6117c6565b61049d6004803603604081101561085357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561199b565b6108a96004803603602081101561088c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166119c4565b604080519485526020850193909352838301919091526060830152519081900360800190f35b61043b611a0d565b6103a9611a29565b61049d600480360360208110156108f557600080fd5b81019060208101813564010000000081111561091057600080fd5b82018360208201111561092257600080fd5b8035906020019184602083028401116401000000008311171561094457600080fd5b509092509050611aa8565b61049d6004803603604081101561096557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515611bd2565b61049d600480360360408110156109a057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d43565b61049d600480360360808110156109d957600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359190810190608081016060820135640100000000811115610a2157600080fd5b820183602082011115610a3357600080fd5b80359060200191846001830284011164010000000083111715610a5557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f52945050505050565b61031f60048036036020811015610aac57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611f60565b61049d60048036036020811015610adf57600080fd5b50356110d9565b6103a960048036036020811015610afc57600080fd5b5035611f73565b61049d60048036036060811015610b1957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356122e0565b61049d60048036036020811015610b5c57600080fd5b810190602081018135640100000000811115610b7757600080fd5b820183602082011115610b8957600080fd5b80359060200191846020830284011164010000000083111715610bab57600080fd5b5090925090506123db565b61031f60048036036020811015610bcc57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612505565b61038d60048036036040811015610bff57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516612517565b61049d60048036036020811015610c3a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612552565b61031f60048036036020811015610c6d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166126f4565b60fd6020526000908152604090205481565b6000610ca782612707565b610d1257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f7265636f76657261626c653a206e6f6e6578697374656e7420746f6b656e0000604482015290519081900360640190fd5b600082815260fc60209081526040918290208251608081018452815473ffffffffffffffffffffffffffffffffffffffff80821683526bffffffffffffffffffffffff740100000000000000000000000000000000000000009283900481169584019590955260019093015492831694820194909452929004166060820152610d9a81612714565b9150505b919050565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526065602052604090205460ff1690565b609c8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e845780601f10610e5957610100808354040283529160200191610e84565b820191906000526020600020905b815481529060010190602001808311610e6757829003601f168201915b5050505050905090565b6000610e9982612707565b610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806146f4602c913960400191505060405180910390fd5b506000908152609a602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610f22826113ba565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fa9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061474f6021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610fc86127b1565b73ffffffffffffffffffffffffffffffffffffffff161480610ff65750610ff681610ff16127b1565b612517565b61104b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806146196038913960400191505060405180910390fd5b61105583836127b5565b505050565b33600090815261015f602052604090205460ff166110d957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420616c6c6f776564000000000000000000000000000000000000000000604482015290519081900360640190fd5b6110e281612855565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461118957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6f6e6c7920427269646765526f75746572000000000000000000000000000000604482015290519081900360640190fd5b611055838383612ab2565b60006111a06098612c4e565b905090565b60fb5481565b611055612c59565b61015f6020526000908152604090205460ff1681565b600080606060008060008060006111df896113ba565b73ffffffffffffffffffffffffffffffffffffffff8116600090815261015f602052604090205490985060ff16965061121789611f73565b60008a815260fc60209081526040918290208251608081018452815473ffffffffffffffffffffffffffffffffffffffff8082168084526bffffffffffffffffffffffff7401000000000000000000000000000000000000000093849004811696850187905260019095015491821696840187905291900490921660608201819052949a509098509096509094509092506112b18a610c9c565b915050919395975091939597565b73ffffffffffffffffffffffffffffffffffffffff821660009081526097602052604081206112ee9083612cc0565b90505b92915050565b60fc602052600090815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff808316926bffffffffffffffffffffffff740100000000000000000000000000000000000000009182900481169392831692919091041684565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806113b2609884612ccc565b509392505050565b60006112f18260405180606001604052806029815260200161467b6029913960989190612ce8565b609f8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e845780601f10610e5957610100808354040283529160200191610e84565b73ffffffffffffffffffffffffffffffffffffffff16600090815260208190526040902054151590565b6114936144b8565b50604080516101c081018252732260fac5e5542a773aa44fbcfedf7c193bc2c599815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2602082015273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489181019190915273853d955acef822db058eb8505911ed77f175b99e606082015273dac17f958d2ee523a2206206994597c13d831ec76080820152736b175474e89094c44da98b954eedeac495271d0f60a082015273d417144312dbf50465b1c641d016962017ef624060c0820152733d6f0dea3ac3c607b3998e6ce14b6350721752d960e08201527340eb746dee876ac1e78697b7ca85142d178a1fc861010082015273f1a91c7d44768070f711c68f33a7ca25c8d30268610120820152733432b6a60d23ca0dfca7761b7ab56459d9c964d0610140820152733431f91b3a388115f00c5ba9fdb899851d005fb561016082015273e5097d9baeafb89f9bcb78c9290d545db5f9e9cb61018082015273f1dc500fde233a4055e25e5bbf516372bc4f68716101a082015290565b600073ffffffffffffffffffffffffffffffffffffffff8216611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614651602a913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526097602052604090206112f190612c4e565b6116b76127b1565b73ffffffffffffffffffffffffffffffffffffffff166116d5611a0d565b73ffffffffffffffffffffffffffffffffffffffff161461175757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60c95460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360c980547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b603254610100900460ff16806117df57506117df612cff565b806117ed575060325460ff16155b611842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806146a4602e913960400191505060405180910390fd5b603254610100900460ff161580156118a857603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6118b0612d10565b6119246040518060400160405280600981526020017f4e6f6d6164204e465400000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f6e6f4e4654000000000000000000000000000000000000000000000000000000815250612fa1565b6119626040518060400160405280601681526020017f68747470733a2f2f6e66742e6e6f6d61642e78797a2f000000000000000000008152506130d0565b61196a6130e3565b80156110e257603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260208190526040902055565b73ffffffffffffffffffffffffffffffffffffffff166000908152602081815260408083205460fd83528184205461012d84528285205461012e90945291909320549293909290565b60c95473ffffffffffffffffffffffffffffffffffffffff1690565b609d8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e845780601f10610e5957610100808354040283529160200191610e84565b611ab06127b1565b73ffffffffffffffffffffffffffffffffffffffff16611ace611a0d565b73ffffffffffffffffffffffffffffffffffffffff1614611b5057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60005b8181101561105557600161015f6000858585818110611b6e57fe5b6020908102929092013573ffffffffffffffffffffffffffffffffffffffff1683525081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101611b53565b611bda6127b1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c7457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b80609b6000611c816127b1565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155611cf06127b1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b611d4b6127b1565b73ffffffffffffffffffffffffffffffffffffffff16611d69611a0d565b73ffffffffffffffffffffffffffffffffffffffff1614611deb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b611e2c73ffffffffffffffffffffffffffffffffffffffff83167f0000000000000000000000000000000000000000000000000000000000000000836131d5565b73ffffffffffffffffffffffffffffffffffffffff8216600081815261012e602090815260408083205461012d8352928190205481517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152915193900393926370a0823192602480840193919291829003018186803b158015611eb557600080fd5b505afa158015611ec9573d6000803e3d6000fd5b505050506040513d6020811015611edf57600080fd5b50511015611f4e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2172656d6f766520616d6f756e74000000000000000000000000000000000000604482015290519081900360640190fd5b5050565b611f5a612c59565b50505050565b61012e6020526000908152604090205481565b6060611f7e82612707565b611fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614720602f913960400191505060405180910390fd5b6000828152609e602090815260408083208054825160026001831615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190921691909104601f8101859004850282018501909352828152929091908301828280156120845780601f1061205957610100808354040283529160200191612084565b820191906000526020600020905b81548152906001019060200180831161206757829003601f168201915b5050505050905060006120956113e2565b90508051600014156120a957509050610d9e565b8151156121c45780826040516020018083805190602001908083835b6020831061210257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016120c5565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905285519190930192850191508083835b6020831061218657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612149565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050610d9e565b806121ce85613262565b6040516020018083805190602001908083835b6020831061221e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016121e1565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905285519190930192850191508083835b602083106122a257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612265565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b6122e86127b1565b73ffffffffffffffffffffffffffffffffffffffff16612306611a0d565b73ffffffffffffffffffffffffffffffffffffffff161461238857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6123aa73ffffffffffffffffffffffffffffffffffffffff831684308461338f565b73ffffffffffffffffffffffffffffffffffffffff909116600090815261012d602052604090208054909101905550565b6123e36127b1565b73ffffffffffffffffffffffffffffffffffffffff16612401611a0d565b73ffffffffffffffffffffffffffffffffffffffff161461248357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60005b8181101561105557600061015f60008585858181106124a157fe5b6020908102929092013573ffffffffffffffffffffffffffffffffffffffff1683525081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101612486565b60006020819052908152604090205481565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152609b6020908152604080832093909416825291909152205460ff1690565b61255a6127b1565b73ffffffffffffffffffffffffffffffffffffffff16612578611a0d565b73ffffffffffffffffffffffffffffffffffffffff16146125fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116612666576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806145cd6026913960400191505060405180910390fd5b60c95460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61012d6020526000908152604090205481565b60006112f1609883613424565b805173ffffffffffffffffffffffffffffffffffffffff90811660009081526020818152604080832054828601518651909516845261012d909252822054919283926bffffffffffffffffffffffff909116028161276e57fe5b04905082606001516bffffffffffffffffffffffff16811015612795576000915050610d9e565b60608301516bffffffffffffffffffffffff1690039050919050565b3390565b6000818152609a6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155819061280f826113ba565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612860826113ba565b905073ffffffffffffffffffffffffffffffffffffffff811633146128e657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6f6e6c79204e465420686f6c6465722063616e207265636f7665720000000000604482015290519081900360640190fd5b600082815260fc602090815260408083208151608081018352815473ffffffffffffffffffffffffffffffffffffffff80821683526bffffffffffffffffffffffff74010000000000000000000000000000000000000000928390048116968401969096526001909301549283169382019390935291900490911660608201529061297082612714565b9050806129de57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63757272656e746c792066756c6c79207265636f766572656400000000000000604482015290519081900360640190fd5b815173ffffffffffffffffffffffffffffffffffffffff808216600081815261012e6020908152604080832080548801905589835260fc82529182902060010180546bffffffffffffffffffffffff7401000000000000000000000000000000000000000080830482168a0190911602908616179055815186815291519388169389927f17d2c50d23ce305bb9110cc7ebdad11256efdcde5771581f8a57202e4eafaff692908290030190a4612aab73ffffffffffffffffffffffffffffffffffffffff821685846131d5565b5050505050565b60fb805460018101909155612ac78382613430565b600081815260fc6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8a81169182178116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8b160217845560019093018054909216928916929092179055835260fd80835281842080548701908190558484529190932054929091521115612be257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6f7665726d696e74000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16827f72d16d2b2c30660a6bd00c67b3674217920a01054fcd02777011805372a50c80856040518082815260200191505060405180910390a450505050565b60006112f18261344a565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f207472616e73666572730000000000000000000000000000000000000000604482015290519081900360640190fd5b60006112ee838361344e565b6000808080612cdb86866134cc565b9097909650945050505050565b6000612cf5848484613561565b90505b9392505050565b6000612d0a30613645565b15905090565b600060208190526417f117200f7ff0b998666205e50af945dcd5198861491334a6162cc24264d9a801634ee07ec8556904d7b58372297b8deaf97f2a11cb67ca5c7e99dba99b50e02c11472d0f19c22ed5af42a1599a7f57e1c7a455654f5aa599f7c07fc6521c8ea4247e8beb499344e591b9401fb2807ff9997dd598fd9e56c73a264d556a05873e2ff48e466ba2a59d7f27e997bcf7e34b5892c35718d72ca8a4d44f6f77265e19fe4feb6a8ebb16cc7b556507d8748182137fa934b07068f5d95a11413ed6d08a4a1122dc4b8c14a6ab2d94f8b279dac63042556a03c00b5742b19f454142857f5306b8fbe80b30a74098357ee8e26fad8dc069da9011cca5f0870a0a5982e541556a5dce3546a3de30fc55c6007f9cdb9ef8486d08aeebffa8fc9bbb85a20624c3ec8359d0fa1781366bd9aea8ad55699bf5a4d57a26c3c9d3b07f55813e084f33673b4b20bdc0331a65033a42722331e3f55a70ef815e1ddd4fb4556b01ab04465765b7c37a9b10007f65d12645f02a494bda192fbb7d0176b7df838fe8410c311663defbb56bfe7c28556a05f94e3dd1d341a8a949207fd50ff4d0ac27265152d143aec668d4c99a8fc77655d8a62125d1a4d3cd59087b55691692887ced913385b7807f541919c86040022d9e18ea6a255cd26949db2e27ffdd387787ea434611d53f44556a30a52129bcbbb1a75b6ac07f5f5fc63651242af2cb273d90cb6dd24751f30b6c885d12f328d3de3f13cba808556a09c3302fbb8195460740007f6fc1d9f3e3a05044d624fd126acdcb494d565eda599ac28936ba2e25ca06a62c5573f1dc500fde233a4055e25e5bbf516372bc4f6871905269444f9a32d89d50eec9647f9754ecc4659a29acf96c52a3094f54ed36634a7cb944ee6f2311c46b1437563355565b603254610100900460ff1680612fba5750612fba612cff565b80612fc8575060325460ff16155b61301d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806146a4602e913960400191505060405180910390fd5b603254610100900460ff1615801561308357603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b61308b61364b565b61309361375d565b61309d8383613868565b801561105557603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b8051611f4e90609f9060208401906144d7565b603254610100900460ff16806130fc57506130fc612cff565b8061310a575060325460ff16155b61315f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806146a4602e913960400191505060405180910390fd5b603254610100900460ff161580156131c557603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6131cd61364b565b61196a6139ed565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611055908490613b7d565b6060816132a3575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610d9e565b8160005b81156132bb57600101600a820491506132a7565b60008167ffffffffffffffff811180156132d457600080fd5b506040519080825280601f01601f1916602001820160405280156132ff576020820181803683370190505b5085935090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b831561338657600a840660300160f81b8282806001900393508151811061334c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350613329565b50949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611f5a908590613b7d565b60006112ee8383613c55565b611f4e828260405180602001604052806000815250613c6d565b5490565b815460009082106134aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806145796022913960400191505060405180910390fd5b8260000182815481106134b957fe5b9060005260206000200154905092915050565b81546000908190831061352a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806146d26022913960400191505060405180910390fd5b600084600001848154811061353b57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281613616576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135db5781810151838201526020016135c3565b50505050905090810190601f1680156136085780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061362957fe5b9060005260206000209060020201600101549150509392505050565b3b151590565b603254610100900460ff16806136645750613664612cff565b80613672575060325460ff16155b6136c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806146a4602e913960400191505060405180910390fd5b603254610100900460ff1615801561196a57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9091166101001716600117905580156110e257603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b603254610100900460ff16806137765750613776612cff565b80613784575060325460ff16155b6137d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806146a4602e913960400191505060405180910390fd5b603254610100900460ff1615801561383f57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b61196a7f01ffc9a700000000000000000000000000000000000000000000000000000000613cd9565b603254610100900460ff16806138815750613881612cff565b8061388f575060325460ff16155b6138e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806146a4602e913960400191505060405180910390fd5b603254610100900460ff1615801561394a57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b825161395d90609c9060208601906144d7565b50815161397190609d9060208501906144d7565b5061399b7f80ac58cd00000000000000000000000000000000000000000000000000000000613cd9565b6139c47f5b5e139f00000000000000000000000000000000000000000000000000000000613cd9565b61309d7f780e9d6300000000000000000000000000000000000000000000000000000000613cd9565b603254610100900460ff1680613a065750613a06612cff565b80613a14575060325460ff16155b613a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806146a4602e913960400191505060405180910390fd5b603254610100900460ff16158015613acf57603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000613ad96127b1565b60c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156110e257603280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b6000613bdf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613dc59092919063ffffffff16565b80519091501561105557808060200190516020811015613bfe57600080fd5b5051611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614770602a913960400191505060405180910390fd5b60009081526001919091016020526040902054151590565b613c778383613dd4565b613c846000848484613f5d565b611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061459b6032913960400191505060405180910390fd5b7fffffffff000000000000000000000000000000000000000000000000000000008082161415613d6a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b7fffffffff0000000000000000000000000000000000000000000000000000000016600090815260656020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6060612cf5848460008561416e565b73ffffffffffffffffffffffffffffffffffffffff8216613e5657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b613e5f81612707565b15613ecb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b613ed760008383611055565b73ffffffffffffffffffffffffffffffffffffffff82166000908152609760205260409020613f069082614328565b50613f1360988284614334565b50604051819073ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000613f7e8473ffffffffffffffffffffffffffffffffffffffff16613645565b613f8a57506001614166565b60006141027f150b7a0200000000000000000000000000000000000000000000000000000000613fb86127b1565b888787604051602401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614039578181015183820152602001614021565b50505050905090810190601f1680156140665780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405180606001604052806032815260200161459b6032913973ffffffffffffffffffffffffffffffffffffffff88169190613dc5565b9050600081806020019051602081101561411b57600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a020000000000000000000000000000000000000000000000000000000014925050505b949350505050565b6060824710156141c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806145f36026913960400191505060405180910390fd5b6141d285613645565b61423d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106142a657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614269565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614308576040519150601f19603f3d011682016040523d82523d6000602084013e61430d565b606091505b509150915061431d828286614357565b979650505050505050565b60006112ee83836143d7565b6000612cf5848473ffffffffffffffffffffffffffffffffffffffff8516614421565b60608315614366575081612cf8565b8251156143765782518084602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528451602484015284518593919283926044019190850190808383600083156135db5781810151838201526020016135c3565b60006143e38383613c55565b614419575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556112f1565b5060006112f1565b600082815260018401602052604081205480614486575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055612cf8565b8285600001600183038154811061449957fe5b9060005260206000209060020201600101819055506000915050612cf8565b604051806101c00160405280600e906020820280368337509192915050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261450d5760008555614553565b82601f1061452657805160ff1916838001178555614553565b82800160010185558215614553579182015b82811115614553578251825591602001919060010190614538565b5061455f929150614563565b5090565b5b8082111561455f576000815560010161456456fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a164736f6c6343000706000a60806040526040516200148038038062001480833981810160405260808110156200002957600080fd5b81019080805160405193929190846401000000008211156200004a57600080fd5b9083019060208201858111156200006057600080fd5b82516401000000008111828201881017156200007b57600080fd5b82525081516020918201929091019080838360005b83811015620000aa57818101518382015260200162000090565b50505050905090810190601f168015620000d85780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620000fc57600080fd5b9083019060208201858111156200011257600080fd5b82516401000000008111828201881017156200012d57600080fd5b82525081516020918201929091019080838360005b838110156200015c57818101518382015260200162000142565b50505050905090810190601f1680156200018a5780820380516001836020036101000a031916815260200191505b50604090815260208281015192909101518651929450925085918591620001b79160039185019062000369565b508051620001cd90600490602084019062000369565b50506005805460ff1916601217905550620001e98282620001f3565b5050505062000415565b6001600160a01b0382166200024f576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6200025d6000838362000302565b62000279816002546200030760201b620007d11790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620002ac918390620007d162000307821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b505050565b60008282018381101562000362576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620003a15760008555620003ec565b82601f10620003bc57805160ff1916838001178555620003ec565b82800160010185558215620003ec579182015b82811115620003ec578251825591602001919060010190620003cf565b50620003fa929150620003fe565b5090565b5b80821115620003fa5760008155600101620003ff565b61105b80620004256000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806340c10f19116100975780639dc29fac116100665780639dc29fac14610374578063a457c2d7146103ad578063a9059cbb146103e6578063dd62ed3e1461041f576100f5565b806340c10f19146102bd57806356189cb4146102f657806370a082311461033957806395d89b411461036c576100f5565b8063222f5be0116100d3578063222f5be0146101de57806323b872dd14610223578063313ce567146102665780633950935114610284576100f5565b806306fdde03146100fa578063095ea7b31461017757806318160ddd146101c4575b600080fd5b61010261045a565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561013c578181015183820152602001610124565b50505050905090810190601f1680156101695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b06004803603604081101561018d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561050e565b604080519115158252519081900360200190f35b6101cc61052b565b60408051918252519081900360200190f35b610221600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610531565b005b6101b06004803603606081101561023957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610541565b61026e6105e2565b6040805160ff9092168252519081900360200190f35b6101b06004803603604081101561029a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356105eb565b610221600480360360408110156102d357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610646565b6102216004803603606081101561030c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610654565b6101cc6004803603602081101561034f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661065f565b610102610687565b6102216004803603604081101561038a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610706565b6101b0600480360360408110156103c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610710565b6101b0600480360360408110156103fc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610785565b6101cc6004803603604081101561043557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610799565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105045780601f106104d957610100808354040283529160200191610504565b820191906000526020600020905b8154815290600101906020018083116104e757829003601f168201915b5050505050905090565b600061052261051b61084c565b8484610850565b50600192915050565b60025490565b61053c838383610997565b505050565b600061054e848484610997565b6105d88461055a61084c565b6105d385604051806060016040528060288152602001610f986028913973ffffffffffffffffffffffffffffffffffffffff8a166000908152600160205260408120906105a561084c565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549190610b67565b610850565b5060019392505050565b60055460ff1690565b60006105226105f861084c565b846105d3856001600061060961084c565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c1681529252902054906107d1565b6106508282610c18565b5050565b61053c838383610850565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105045780601f106104d957610100808354040283529160200191610504565b6106508282610d49565b600061052261071d61084c565b846105d38560405180606001604052806025815260200161102a602591396001600061074761084c565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d16815292529020549190610b67565b600061052261079261084c565b8484610997565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60008282018381101561084557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b73ffffffffffffffffffffffffffffffffffffffff83166108bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806110066024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610928576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180610f506022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610a03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180610fe16025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180610f0b6023913960400191505060405180910390fd5b610a7a83838361053c565b610ac481604051806060016040528060268152602001610f726026913973ffffffffffffffffffffffffffffffffffffffff86166000908152602081905260409020549190610b67565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610b0090826107d1565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610c10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610bd5578181015183820152602001610bbd565b50505050905090810190601f168015610c025780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8216610c9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610ca66000838361053c565b600254610cb390826107d1565b60025573ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054610ce690826107d1565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180610fc06021913960400191505060405180910390fd5b610dc18260008361053c565b610e0b81604051806060016040528060228152602001610f2e6022913973ffffffffffffffffffffffffffffffffffffffff85166000908152602081905260409020549190610b67565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902055600254610e3e9082610e93565b60025560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600082821115610f0457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa164736f6c6343000706000a4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e745d4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4572726f723a2061203d3d2062206e6f7420736174697366696564205b616464726573735da164736f6c6343000706000a",
    "sourceMap": "421:4047:51:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;851:387;;;:::i;:::-;;3504:207;;;:::i;321:38:1:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3201:65:51;;;:::i;3272:92::-;;;:::i;4071:395::-;;;:::i;634:59::-;;;:::i;:::-;;;;;;;;;;;;;;;;3717:180;;;:::i;3903:162::-;;;:::i;1244:829::-;;;:::i;1819:584:0:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;3370:128:51;;;:::i;2079:1116::-;;;:::i;170:28:1:-;;;:::i;1572:26:0:-;;;:::i;851:387:51:-;954:9;;906:58;;947:4;;954:9;;;906:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;906:58:51;;;;;;;;;;;;;;;-1:-1:-1;893:10:51;:71;;;;;;;;;;;;;974:23;;;;;;;;:10;;;;;:21;;:23;;;;;-1:-1:-1;;974:23:51;;;;;;;-1:-1:-1;974:10:51;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1041:14:51;;;;;;1049:5;1041:14;;;;;;250:64:1;;-1:-1:-1;1041:7:51;;-1:-1:-1;1041:14:51;;;;;;;;;;;;;;274:37:1;250:64;1041:14:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1041:14:51;1034:4;:21;;;;;;;;;;;;;;1077:42;;-1:-1:-1;;;;1077:42:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1077:42:51;;;;;;;;;;;;;;;-1:-1:-1;1065:9:51;:54;;;;;;;;;;;;;;;1129:5;:26;;;;;1145:9;;;1129:26;;;;;;;;1165:10;;:66;;;;;;1202:5;;;-1:-1:-1;1165:66:51;;;682:11;1165:66;;;;;:10;;;:36;;:66;;;;;1065:9;;1165:66;;;;;;;;1065:9;1165:10;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;851:387::o;3504:207::-;3560:13;:11;:13::i;:::-;3591:14;;;;;;3599:5;3591:14;;;;;;250:64:1;;3591:7:51;;:14;;;;;;;;;;;;;;274:37:1;250:64;3591:14:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3591:14:51;3583:5;:22;;;;;;;;;;;;;3615:10;;:66;;;;;;3652:5;;;3615:66;;;;682:11;3615:66;;;;;:10;;;:36;;:66;;;;;-1:-1:-1;;3615:66:51;;;;;;;;-1:-1:-1;3615:10:51;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3691:13;:11;:13::i;:::-;3504:207::o;321:38:1:-;250:64;321:38;:::o;3201:65:51:-;3246:13;:11;:13::i;3272:92::-;3321:13;:11;:13::i;4071:395::-;4116:13;:11;:13::i;:::-;4148:4;;4139:14;;;;;;:8;4148:4;;;4139:14;;;;;250:64:1;;4139:8:51;;:14;;;;;-1:-1:-1;;4139:14:51;;;;;;;-1:-1:-1;250:64:1;4139:14:51;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4163:31:51;;;;;;;;;;;;;;;;;;;;;;;250:64:1;;-1:-1:-1;4163:15:51;;-1:-1:-1;4163:31:51;;;;;274:37:1;;4163:31:51;;;;;;;274:37:1;250:64;4163:31:51;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4204:10:51;;4228:4;;4234:11;;;;;;4242:2;4234:11;;;;;;4204:10;;;;;-1:-1:-1;4204:23:51;;-1:-1:-1;4228:4:51;;;;;250:64:1;;4234:7:51;;:11;;;;;;;;;;;;;;-1:-1:-1;250:64:1;4234:11:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4234:11:51;4204:45;;;;;;;;;;;;;;;;;;;;;;;;;;;4247:1;4204:45;;;;;;;;;;;;;;;;;;4247:1;4204:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4259:31:51;;;;;;;;;;;;;;;;;;;;;;;250:64:1;;-1:-1:-1;4259:15:51;;-1:-1:-1;4259:31:51;;;;;274:37:1;;4259:31:51;;;;;;;274:37:1;250:64;4259:31:51;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4300:10:51;;4328:4;;4334:11;;;;;;4342:2;4334:11;;;;;;4300:10;;;;;-1:-1:-1;4300:27:51;;-1:-1:-1;4328:4:51;;;;;250:64:1;;4334:7:51;;:11;;;;;;;;;;;;;;-1:-1:-1;250:64:1;4334:11:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4334:11:51;4300:49;;;;;;;;;;;;;;;;;;;;;;;;;;;4347:1;4300:49;;;;;;;;;;;;;;;;;;4347:1;4300:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4359:31:51;;;;;;;;;;;;;;;;;;;;;;;250:64:1;;-1:-1:-1;4359:15:51;;-1:-1:-1;4359:31:51;;;;;274:37:1;;4359:31:51;;;;;;;274:37:1;250:64;4359:31:51;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4400:10:51;;4428:4;;4434:11;;;;;;4442:2;4434:11;;;;;;4400:10;;;;;-1:-1:-1;4400:27:51;;-1:-1:-1;4428:4:51;;;;;250:64:1;;4434:7:51;;:11;;;;;;;;;;;;;;-1:-1:-1;250:64:1;4434:11:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4434:11:51;4400:59;;;;;;;;;;;;;;;;;;;;;;;;;;;4447:1;4400:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4447:1;4400:59;;;;;;;;;;;634;682:11;634:59;:::o;3717:180::-;3782:25;3775:4;:32;3817:27;;;;;;;;;;;;;;;;;;;;;;;250:64:1;;3817:15:51;;:27;;;;;274:37:1;;3817:27:51;;;;;;;274:37:1;250:64;3817:27:51;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3854:10:51;;3872:5;;3879:4;;3885;;3854:36;;;;;;:10;3872:5;;;3854:36;;;;3879:4;;;3854:36;;;;;;;;;;;;:10;;;;;-1:-1:-1;3854:17:51;;-1:-1:-1;3854:36:51;;;;;:10;;:36;;;;;;;:10;;:36;;;;;;;;;;3903:162;3964:11;;;;;;3972:2;3964:11;;;;;;250:64:1;;3964:7:51;;:11;;;;;;;;;;;;;;274:37:1;250:64;3964:11:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3964:11:51;3956:5;:19;;;;;;;;;;;;;;3985:27;;;;;;3964:11;3985:27;;;;;;;;;;;;;;;;;250:64:1;;3985:15:51;;:27;;;;;-1:-1:-1;;3985:27:51;;;;;;;-1:-1:-1;250:64:1;3985:27:51;;;;;;;;;;1244:829;1364:10;;:18;;;;;;;;1355:43;;1364:10;;;:16;;:18;;;;;;;;;;;;;;:10;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1364:18:51;1392:4;1355:8;:43::i;:::-;1417:10;;:25;;;;;;;;1408:50;;1417:10;;;:23;;:25;;;;;;;;;;;;;;:10;:25;;;;;;;;;;1408:50;1477:10;;:19;;;;;;;;1468:32;;1477:10;;;:17;;:19;;;;;;;;;;;;;;:10;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1477:19:51;1498:1;1468:8;:32::i;:::-;1519:10;;1542:5;;1519:29;;;;;;:10;1542:5;;;1519:29;;;;;;1510:42;;1519:10;;;;;:22;;:29;;;;;;;;;;;;;;;:10;:29;;;;;;;;;;1510:42;1697:10;;:21;;;;;;1576:14;1697:21;;;;;;;;1576:14;;;;;;;;1697:10;;;:18;;:21;;;;;;;;;;;;;;;:10;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1697:21:51;;;;;;;;;;;;;;;;;-1:-1:-1;1697:21:51;-1:-1:-1;1697:21:51;;-1:-1:-1;1697:21:51;-1:-1:-1;1728:28:51;1697:21;1753:1;1728:8;:28::i;:::-;1766:29;1783:7;1775:16;;1793:1;1766:8;:29::i;:::-;1805:35;1814:13;1837:1;1805:8;:35::i;:::-;1850:32;1867:10;1859:19;;1880:1;1850:8;:32::i;:::-;1901:10;;1926:5;;1901:31;;;;;;:10;1926:5;;;1901:31;;;;;;1892:64;;1901:10;;;;;:24;;:31;;;;;;;;;;;;;;;:10;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1901:31:51;682:11;1892:8;:64::i;:::-;1977:10;;2004:5;;1977:33;;;;;;:10;2004:5;;;1977:33;;;;;;1966:45;;1977:10;;;;;:26;;:33;;;;;;;;;;;;;;;:10;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1977:33:51;1966:10;:45::i;:::-;2030:10;;2056:5;;2030:32;;;;;;:10;2056:5;;;2030:32;;;;;;2021:45;;2030:10;;;;;:25;;:32;;;;;;;;;;;;;;;:10;:32;;;;;;;;;;1819:584:0;1853:4;1873:7;;;;;;;1869:528;;;-1:-1:-1;1903:7:0;;;;;;;1896:14;;1869:528;1941:17;1984:16;:14;:16::i;:::-;1980:374;;;2196:43;;;1671:64;2196:43;;;;;;;2221:17;2196:43;;;;;;;;;;;;;1679:55;2196:43;;;;;2086:175;;;;;;;;;2023:20;;1671:64;;2135:34;;2196:43;2086:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2047:232;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2020:259;;;2323:7;2312:27;;;;;;;;;;;;;;;-1:-1:-1;2312:27:0;;-1:-1:-1;;1980:374:0;2374:12;-1:-1:-1;1869:528:0;1819:584;:::o;3370:128:51:-;3424:13;:11;:13::i;:::-;3454:14;;;;;;3462:5;3454:14;;;;;;250:64:1;;3454:7:51;;:14;;;;;;;;;;;;;;274:37:1;250:64;3454:14:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3454:14:51;3447:4;:21;;;;;;;;;;;;;;3478:13;2079:1116;2133:10;;:19;;;;;;;;2119:11;;2133:10;;;:17;;:19;;;;;;;;;;;;;;:10;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2133:19:51;2183:10;;2206:5;;2183:29;;;;;;:10;2206:5;;;2183:29;;;;;;2133:19;;-1:-1:-1;2162:18:51;;2183:10;;;;;:22;;:29;;;;;2133:19;;2183:29;;;;;;;:10;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2183:29:51;2259:60;;;;;2183:29;2259:60;;;;;;;;;;;;;2183:29;;-1:-1:-1;250:64:1;;2259:15:51;;:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2329:10:51;;:23;;;;;;;;;;;;;;:10;;;;;-1:-1:-1;2329:18:51;;-1:-1:-1;2329:23:51;;;;;;;;;;;;;;;:10;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2446:10:51;;2400:58;;;;;;2414:4;2400:58;;;;;;;;;;;;;;;;;;;;;;:13;2446:10;;;2400:58;;;;;250:64:1;;2400:13:51;;:58;;;;;-1:-1:-1;;2400:58:51;;;;;;;-1:-1:-1;250:64:1;2400:58:51;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2500:4:51;;2493:5;;2506:4;;2473:38;;;;;;;2500:4;;;;;-1:-1:-1;2493:5:51;;;;;-1:-1:-1;2488:3:51;;2473:38;;;;;;;;;;2521:10;;2539:5;;2546:4;;2552;;2521:36;;;;;;:10;2539:5;;;2521:36;;;;2546:4;;;2521:36;;;;;;;;;;;;:10;;;;;:17;;:36;;;;;:10;;:36;;;;;;;:10;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2614:10:51;;:23;;;;;;;;;;;;;;2605:39;;-1:-1:-1;2614:10:51;;;;;-1:-1:-1;2614:18:51;;:23;;;;;;;;;;;;;;:10;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2614:23:51;2639:4;;;;2605:8;:39::i;:::-;2832:10;;:23;;;;;;;;;;;;;;2703:16;;;;;;;;2832:10;;;:18;;:23;;;;;;;;;;;;;;:10;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2832:23:51;;;;;;;;;;;;;;;2884:5;;2832:23;;-1:-1:-1;2832:23:51;;-1:-1:-1;2832:23:51;;-1:-1:-1;2832:23:51;;-1:-1:-1;2865:25:51;;2832:23;;2884:5;;2865:8;:25::i;:::-;2900:34;2917:9;2909:18;;2929:4;;2900:8;:34::i;:::-;2970:4;;2944:31;;2953:15;;2970:4;;2944:8;:31::i;:::-;2985:34;3002:12;2994:21;;3017:1;2985:8;:34::i;:::-;3091:10;;:19;;;;;;;;3082:38;;3091:10;;;:17;;:19;;;;;;;;;;;;;;:10;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3091:19:51;3118:1;3112:7;;3082:8;:38::i;:::-;3139:10;;3162:5;;3139:29;;;;;;:10;3162:5;;;3139:29;;;;;;3130:58;;3139:10;;;;;:22;;:29;;;;;;;;;;;;;;;:10;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3139:29:51;3183:4;;3170:17;;3130:8;:58::i;:::-;2079:1116;;;;;;:::o;170:28:1:-;;;;;;;;;:::o;1572:26:0:-;;;;;;:::o;3615:277::-;3683:1;3678:6;;:1;:6;;;3674:212;;3705:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3768:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3821;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3869:6;:4;:6::i;:::-;3615:277;;:::o;5202:262::-;5264:1;5259;:6;5255:203;;5286:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5346:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5396;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5441:6;:4;:6::i;3255:157::-;3315:9;3310:96;;3345:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;3389:6;:4;:6::i;:::-;3255:157;:::o;2840:242::-;2990:42;2978:55;3059:16;;2840:242;:::o;2410:424::-;2449:16;:14;:16::i;:::-;2445:359;;;2645:67;;;1671:64;2645:67;;;;;;;2670:17;2645:67;;;;2705:4;1679:55;2645:67;;;;;;;;;;;;;;;;;;;;;;;2534:196;;;;;;;;;2482:11;;1671:64;;2579:43;;2645:67;2534:196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2499:245;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;2445:359:0;2813:7;:14;;;;;;;;2410:424::o;-1:-1:-1:-;;;;;;;;:::o;:::-;;;;;;;;:::o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "AFFECTED_TOKEN_AMOUNT()": "62527e1b",
    "IS_SCRIPT()": "f8ccbf47",
    "IS_TEST()": "fa7626d4",
    "failed()": "ba414fa6",
    "recordCheck()": "dc2d1d5a",
    "setUp()": "0a9254e4",
    "test_dontMintMoreThanAffected()": "7fab4950",
    "test_dontMintRandomAsset()": "9d99ec16",
    "test_initValues()": "a021789a",
    "test_mintTwoDifferentAssets()": "1326b0c2",
    "test_mintTwoDifferentUser()": "d559c890",
    "test_mintTwoSameUser()": "4a0f652e",
    "test_noTransfers()": "591ddb27",
    "test_recordCheck()": "446692b4",
    "vm()": "3a768463"
  },
  "ast": {
    "absolutePath": "packages/contracts-bridge/contracts/test/NFTAccountant.t.sol",
    "id": 38516,
    "exportedSymbols": {
      "DSTest": [
        1786
      ],
      "ERC20Mock": [
        26936
      ],
      "IERC20": [
        27517
      ],
      "NFTAccountant": [
        33021
      ],
      "NFTAccountantTest": [
        38515
      ],
      "NFTRecoveryAccountantHarness": [
        42076
      ],
      "Script": [
        2021
      ],
      "StdStorage": [
        5000
      ],
      "Test": [
        4902
      ],
      "Vm": [
        6909
      ],
      "console": [
        14973
      ],
      "console2": [
        23037
      ],
      "stdError": [
        4972
      ],
      "stdJson": [
        2380
      ],
      "stdMath": [
        6215
      ],
      "stdStorage": [
        6076
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:4423:51",
    "nodes": [
      {
        "id": 38016,
        "nodeType": "PragmaDirective",
        "src": "46:22:51",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 38017,
        "nodeType": "ImportDirective",
        "src": "70:28:51",
        "absolutePath": "lib/forge-std/src/Test.sol",
        "file": "forge-std/Test.sol",
        "scope": 38516,
        "sourceUnit": 6216,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 38018,
        "nodeType": "ImportDirective",
        "src": "99:32:51",
        "absolutePath": "lib/forge-std/src/console2.sol",
        "file": "forge-std/console2.sol",
        "scope": 38516,
        "sourceUnit": 23038,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 38020,
        "nodeType": "ImportDirective",
        "src": "133:63:51",
        "absolutePath": "packages/contracts-bridge/contracts/accountants/NFTAccountant.sol",
        "file": "../accountants/NFTAccountant.sol",
        "scope": 38516,
        "sourceUnit": 33523,
        "symbolAliases": [
          {
            "foreign": {
              "id": 38019,
              "name": "NFTAccountant",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "141:13:51",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 38022,
        "nodeType": "ImportDirective",
        "src": "197:80:51",
        "absolutePath": "packages/contracts-bridge/contracts/test/harness/NFTAccountantHarness.sol",
        "file": "./harness/NFTAccountantHarness.sol",
        "scope": 38516,
        "sourceUnit": 42077,
        "symbolAliases": [
          {
            "foreign": {
              "id": 38021,
              "name": "NFTRecoveryAccountantHarness",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "205:28:51",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 38024,
        "nodeType": "ImportDirective",
        "src": "278:70:51",
        "absolutePath": "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "scope": 38516,
        "sourceUnit": 27518,
        "symbolAliases": [
          {
            "foreign": {
              "id": 38023,
              "name": "IERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "286:6:51",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 38026,
        "nodeType": "ImportDirective",
        "src": "349:70:51",
        "absolutePath": "node_modules/@openzeppelin/contracts/mocks/ERC20Mock.sol",
        "file": "@openzeppelin/contracts/mocks/ERC20Mock.sol",
        "scope": 38516,
        "sourceUnit": 26937,
        "symbolAliases": [
          {
            "foreign": {
              "id": 38025,
              "name": "ERC20Mock",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "357:9:51",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 38515,
        "nodeType": "ContractDefinition",
        "src": "421:4047:51",
        "nodes": [
          {
            "id": 38030,
            "nodeType": "VariableDeclaration",
            "src": "462:13:51",
            "constant": false,
            "mutability": "mutable",
            "name": "asset",
            "scope": 38515,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 38029,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "462:7:51",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 38032,
            "nodeType": "VariableDeclaration",
            "src": "481:12:51",
            "constant": false,
            "mutability": "mutable",
            "name": "user",
            "scope": 38515,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 38031,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "481:7:51",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 38038,
            "nodeType": "VariableDeclaration",
            "src": "499:32:51",
            "constant": false,
            "mutability": "mutable",
            "name": "recipient",
            "scope": 38515,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 38033,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "499:7:51",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "313131",
                  "id": 38036,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "527:3:51",
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_111_by_1",
                    "typeString": "int_const 111"
                  },
                  "value": "111"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_111_by_1",
                    "typeString": "int_const 111"
                  }
                ],
                "expression": {
                  "id": 38034,
                  "name": "vm",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1816,
                  "src": "519:2:51",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Vm_$6909",
                    "typeString": "contract Vm"
                  }
                },
                "id": 38035,
                "isConstant": false,
                "isLValue": false,
                "isPure": false,
                "lValueRequested": false,
                "memberName": "addr",
                "nodeType": "MemberAccess",
                "referencedDeclaration": 6287,
                "src": "519:7:51",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_address_$",
                  "typeString": "function (uint256) external returns (address)"
                }
              },
              "id": 38037,
              "isConstant": false,
              "isLValue": false,
              "isPure": false,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "519:12:51",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 38041,
            "nodeType": "VariableDeclaration",
            "src": "537:20:51",
            "constant": false,
            "mutability": "mutable",
            "name": "amnt",
            "scope": 38515,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 38039,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "537:7:51",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "3332303030",
              "id": 38040,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "552:5:51",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_32000_by_1",
                "typeString": "int_const 32000"
              },
              "value": "32000"
            },
            "visibility": "internal"
          },
          {
            "id": 38043,
            "nodeType": "VariableDeclaration",
            "src": "563:19:51",
            "constant": false,
            "mutability": "mutable",
            "name": "mockToken",
            "scope": 38515,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
              "typeString": "contract ERC20Mock"
            },
            "typeName": {
              "id": 38042,
              "name": "ERC20Mock",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 26936,
              "src": "563:9:51",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                "typeString": "contract ERC20Mock"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 38045,
            "nodeType": "VariableDeclaration",
            "src": "588:39:51",
            "constant": false,
            "mutability": "mutable",
            "name": "accountant",
            "scope": 38515,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
              "typeString": "contract NFTRecoveryAccountantHarness"
            },
            "typeName": {
              "id": 38044,
              "name": "NFTRecoveryAccountantHarness",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 42076,
              "src": "588:28:51",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                "typeString": "contract NFTRecoveryAccountantHarness"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 38048,
            "nodeType": "VariableDeclaration",
            "src": "634:59:51",
            "constant": true,
            "functionSelector": "62527e1b",
            "mutability": "constant",
            "name": "AFFECTED_TOKEN_AMOUNT",
            "scope": 38515,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 38046,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "634:7:51",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "3130305f3030305f303030",
              "id": 38047,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "682:11:51",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_100000000_by_1",
                "typeString": "int_const 100000000"
              },
              "value": "100_000_000"
            },
            "visibility": "public"
          },
          {
            "id": 38058,
            "nodeType": "EventDefinition",
            "src": "700:145:51",
            "anonymous": false,
            "name": "ProcessFailure",
            "parameters": {
              "id": 38057,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 38050,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 38058,
                  "src": "730:18:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 38049,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "730:7:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 38052,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "asset",
                  "nodeType": "VariableDeclaration",
                  "scope": 38058,
                  "src": "758:21:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 38051,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "758:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 38054,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 38058,
                  "src": "789:25:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 38053,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "789:7:51",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 38056,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 38058,
                  "src": "824:14:51",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 38055,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "824:7:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "720:124:51"
            }
          },
          {
            "id": 38112,
            "nodeType": "FunctionDefinition",
            "src": "851:387:51",
            "body": {
              "id": 38111,
              "nodeType": "Block",
              "src": "883:355:51",
              "statements": [
                {
                  "expression": {
                    "id": 38070,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 38061,
                      "name": "accountant",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38045,
                      "src": "893:10:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                        "typeString": "contract NFTRecoveryAccountantHarness"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 38066,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "947:4:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_NFTAccountantTest_$38515",
                                "typeString": "contract NFTAccountantTest"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_NFTAccountantTest_$38515",
                                "typeString": "contract NFTAccountantTest"
                              }
                            ],
                            "id": 38065,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "939:7:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 38064,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "939:7:51",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 38067,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "939:13:51",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 38068,
                          "name": "recipient",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 38038,
                          "src": "954:9:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 38063,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "906:32:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$returns$_t_contract$_NFTRecoveryAccountantHarness_$42076_$",
                          "typeString": "function (address,address) returns (contract NFTRecoveryAccountantHarness)"
                        },
                        "typeName": {
                          "id": 38062,
                          "name": "NFTRecoveryAccountantHarness",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 42076,
                          "src": "910:28:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                            "typeString": "contract NFTRecoveryAccountantHarness"
                          }
                        }
                      },
                      "id": 38069,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "906:58:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                        "typeString": "contract NFTRecoveryAccountantHarness"
                      }
                    },
                    "src": "893:71:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                      "typeString": "contract NFTRecoveryAccountantHarness"
                    }
                  },
                  "id": 38071,
                  "nodeType": "ExpressionStatement",
                  "src": "893:71:51"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 38072,
                        "name": "accountant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38045,
                        "src": "974:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                          "typeString": "contract NFTRecoveryAccountantHarness"
                        }
                      },
                      "id": 38074,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32889,
                      "src": "974:21:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 38075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "974:23:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38076,
                  "nodeType": "ExpressionStatement",
                  "src": "974:23:51"
                },
                {
                  "expression": {
                    "id": 38082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 38077,
                      "name": "user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38032,
                      "src": "1034:4:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "3930323130",
                          "id": 38080,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1049:5:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_90210_by_1",
                            "typeString": "int_const 90210"
                          },
                          "value": "90210"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_90210_by_1",
                            "typeString": "int_const 90210"
                          }
                        ],
                        "expression": {
                          "id": 38078,
                          "name": "vm",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1816,
                          "src": "1041:2:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Vm_$6909",
                            "typeString": "contract Vm"
                          }
                        },
                        "id": 38079,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "addr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6287,
                        "src": "1041:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_address_$",
                          "typeString": "function (uint256) external returns (address)"
                        }
                      },
                      "id": 38081,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1041:14:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1034:21:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 38083,
                  "nodeType": "ExpressionStatement",
                  "src": "1034:21:51"
                },
                {
                  "expression": {
                    "id": 38095,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 38084,
                      "name": "mockToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38043,
                      "src": "1065:9:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                        "typeString": "contract ERC20Mock"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "46616b65",
                          "id": 38087,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1091:6:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_127fa09a2fcbb8d7f72a288d93f869376ca86af36d8899041c5023a8051486d1",
                            "typeString": "literal_string \"Fake\""
                          },
                          "value": "Fake"
                        },
                        {
                          "hexValue": "464b",
                          "id": 38088,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1099:4:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_874e60ef5cb9d7b73c2ccb638038238066f82463431fbff66296a004fa0187c0",
                            "typeString": "literal_string \"FK\""
                          },
                          "value": "FK"
                        },
                        {
                          "arguments": [
                            {
                              "hexValue": "31",
                              "id": 38091,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1113:1:51",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 38090,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1105:7:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 38089,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1105:7:51",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 38092,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1105:10:51",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        {
                          "hexValue": "30",
                          "id": 38093,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1117:1:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_stringliteral_127fa09a2fcbb8d7f72a288d93f869376ca86af36d8899041c5023a8051486d1",
                            "typeString": "literal_string \"Fake\""
                          },
                          {
                            "typeIdentifier": "t_stringliteral_874e60ef5cb9d7b73c2ccb638038238066f82463431fbff66296a004fa0187c0",
                            "typeString": "literal_string \"FK\""
                          },
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 38086,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "1077:13:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_creation_payable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_address_$_t_uint256_$returns$_t_contract$_ERC20Mock_$26936_$",
                          "typeString": "function (string memory,string memory,address,uint256) payable returns (contract ERC20Mock)"
                        },
                        "typeName": {
                          "id": 38085,
                          "name": "ERC20Mock",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 26936,
                          "src": "1081:9:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                            "typeString": "contract ERC20Mock"
                          }
                        }
                      },
                      "id": 38094,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1077:42:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                        "typeString": "contract ERC20Mock"
                      }
                    },
                    "src": "1065:54:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                      "typeString": "contract ERC20Mock"
                    }
                  },
                  "id": 38096,
                  "nodeType": "ExpressionStatement",
                  "src": "1065:54:51"
                },
                {
                  "expression": {
                    "id": 38102,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 38097,
                      "name": "asset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38030,
                      "src": "1129:5:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 38100,
                          "name": "mockToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 38043,
                          "src": "1145:9:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                            "typeString": "contract ERC20Mock"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                            "typeString": "contract ERC20Mock"
                          }
                        ],
                        "id": 38099,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1137:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 38098,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1137:7:51",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 38101,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1137:18:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1129:26:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 38103,
                  "nodeType": "ExpressionStatement",
                  "src": "1129:26:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 38107,
                        "name": "asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38030,
                        "src": "1202:5:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 38108,
                        "name": "AFFECTED_TOKEN_AMOUNT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38048,
                        "src": "1209:21:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 38104,
                        "name": "accountant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38045,
                        "src": "1165:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                          "typeString": "contract NFTRecoveryAccountantHarness"
                        }
                      },
                      "id": 38106,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "exposed_setAffectedAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 42065,
                      "src": "1165:36:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 38109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1165:66:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38110,
                  "nodeType": "ExpressionStatement",
                  "src": "1165:66:51"
                }
              ]
            },
            "functionSelector": "0a9254e4",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setUp",
            "parameters": {
              "id": 38059,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "865:2:51"
            },
            "returnParameters": {
              "id": 38060,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "883:0:51"
            },
            "scope": 38515,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 38219,
            "nodeType": "FunctionDefinition",
            "src": "1244:829:51",
            "body": {
              "id": 38218,
              "nodeType": "Block",
              "src": "1278:795:51",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 38116,
                            "name": "accountant",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38045,
                            "src": "1364:10:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                              "typeString": "contract NFTRecoveryAccountantHarness"
                            }
                          },
                          "id": 38117,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 23099,
                          "src": "1364:16:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 38118,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1364:18:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 38121,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "1392:4:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NFTAccountantTest_$38515",
                              "typeString": "contract NFTAccountantTest"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_NFTAccountantTest_$38515",
                              "typeString": "contract NFTAccountantTest"
                            }
                          ],
                          "id": 38120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1384:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 38119,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1384:7:51",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 38122,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1384:13:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 38115,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 320,
                      "src": "1355:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 38123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1355:43:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38124,
                  "nodeType": "ExpressionStatement",
                  "src": "1355:43:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 38126,
                            "name": "accountant",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38045,
                            "src": "1417:10:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                              "typeString": "contract NFTRecoveryAccountantHarness"
                            }
                          },
                          "id": 38127,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "bridgeRouter",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32615,
                          "src": "1417:23:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 38128,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1417:25:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 38131,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "1452:4:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NFTAccountantTest_$38515",
                              "typeString": "contract NFTAccountantTest"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_NFTAccountantTest_$38515",
                              "typeString": "contract NFTAccountantTest"
                            }
                          ],
                          "id": 38130,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1444:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 38129,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1444:7:51",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 38132,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1444:13:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 38125,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 320,
                      "src": "1408:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 38133,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1408:50:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38134,
                  "nodeType": "ExpressionStatement",
                  "src": "1408:50:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 38136,
                            "name": "accountant",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38045,
                            "src": "1477:10:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                              "typeString": "contract NFTRecoveryAccountantHarness"
                            }
                          },
                          "id": 38137,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "nextID",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32833,
                          "src": "1477:17:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                            "typeString": "function () view external returns (uint256)"
                          }
                        },
                        "id": 38138,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1477:19:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 38139,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1498:1:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 38135,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 514,
                      "src": "1468:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 38140,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1468:32:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38141,
                  "nodeType": "ExpressionStatement",
                  "src": "1468:32:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 38145,
                            "name": "asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38030,
                            "src": "1542:5:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 38143,
                            "name": "accountant",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38045,
                            "src": "1519:10:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                              "typeString": "contract NFTRecoveryAccountantHarness"
                            }
                          },
                          "id": 38144,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalMinted",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32843,
                          "src": "1519:22:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 38146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1519:29:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 38147,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1550:1:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 38142,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 514,
                      "src": "1510:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 38148,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1510:42:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38149,
                  "nodeType": "ExpressionStatement",
                  "src": "1510:42:51"
                },
                {
                  "assignments": [
                    38151,
                    38153,
                    38155,
                    38157
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 38151,
                      "mutability": "mutable",
                      "name": "_asset",
                      "nodeType": "VariableDeclaration",
                      "scope": 38218,
                      "src": "1576:14:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 38150,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1576:7:51",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 38153,
                      "mutability": "mutable",
                      "name": "_amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 38218,
                      "src": "1604:14:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      },
                      "typeName": {
                        "id": 38152,
                        "name": "uint96",
                        "nodeType": "ElementaryTypeName",
                        "src": "1604:6:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint96",
                          "typeString": "uint96"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 38155,
                      "mutability": "mutable",
                      "name": "_originalUser",
                      "nodeType": "VariableDeclaration",
                      "scope": 38218,
                      "src": "1632:21:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 38154,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1632:7:51",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 38157,
                      "mutability": "mutable",
                      "name": "_recovered",
                      "nodeType": "VariableDeclaration",
                      "scope": 38218,
                      "src": "1667:17:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      },
                      "typeName": {
                        "id": 38156,
                        "name": "uint96",
                        "nodeType": "ElementaryTypeName",
                        "src": "1667:6:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint96",
                          "typeString": "uint96"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 38162,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "30",
                        "id": 38160,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1716:1:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "expression": {
                        "id": 38158,
                        "name": "accountant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38045,
                        "src": "1697:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                          "typeString": "contract NFTRecoveryAccountantHarness"
                        }
                      },
                      "id": 38159,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "records",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32838,
                      "src": "1697:18:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$_t_uint96_$_t_address_$_t_uint96_$",
                        "typeString": "function (uint256) view external returns (address,uint96,address,uint96)"
                      }
                    },
                    "id": 38161,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1697:21:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_$_t_uint96_$_t_address_$_t_uint96_$",
                      "typeString": "tuple(address,uint96,address,uint96)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1562:156:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 38164,
                        "name": "_asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38151,
                        "src": "1737:6:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 38167,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1753:1:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 38166,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1745:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 38165,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1745:7:51",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 38168,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1745:10:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 38163,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 320,
                      "src": "1728:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 38169,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1728:28:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38170,
                  "nodeType": "ExpressionStatement",
                  "src": "1728:28:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 38174,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38153,
                            "src": "1783:7:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          ],
                          "id": 38173,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1775:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 38172,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1775:7:51",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 38175,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1775:16:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 38176,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1793:1:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 38171,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 514,
                      "src": "1766:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 38177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1766:29:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38178,
                  "nodeType": "ExpressionStatement",
                  "src": "1766:29:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 38180,
                        "name": "_originalUser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38155,
                        "src": "1814:13:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 38183,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1837:1:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 38182,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1829:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 38181,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1829:7:51",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 38184,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1829:10:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 38179,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 320,
                      "src": "1805:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 38185,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1805:35:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38186,
                  "nodeType": "ExpressionStatement",
                  "src": "1805:35:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 38190,
                            "name": "_recovered",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38157,
                            "src": "1867:10:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          ],
                          "id": 38189,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1859:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 38188,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1859:7:51",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 38191,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1859:19:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 38192,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1880:1:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 38187,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 514,
                      "src": "1850:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 38193,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1850:32:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38194,
                  "nodeType": "ExpressionStatement",
                  "src": "1850:32:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 38198,
                            "name": "asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38030,
                            "src": "1926:5:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 38196,
                            "name": "accountant",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38045,
                            "src": "1901:10:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                              "typeString": "contract NFTRecoveryAccountantHarness"
                            }
                          },
                          "id": 38197,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalAffected",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32620,
                          "src": "1901:24:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 38199,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1901:31:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 38200,
                        "name": "AFFECTED_TOKEN_AMOUNT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38048,
                        "src": "1934:21:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 38195,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 514,
                      "src": "1892:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 38201,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1892:64:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38202,
                  "nodeType": "ExpressionStatement",
                  "src": "1892:64:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 38206,
                            "name": "asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38030,
                            "src": "2004:5:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 38204,
                            "name": "accountant",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38045,
                            "src": "1977:10:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                              "typeString": "contract NFTRecoveryAccountantHarness"
                            }
                          },
                          "id": 38205,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isAffectedAsset",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32740,
                          "src": "1977:26:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view external returns (bool)"
                          }
                        },
                        "id": 38207,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1977:33:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 38203,
                      "name": "assertTrue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        269,
                        290
                      ],
                      "referencedDeclaration": 269,
                      "src": "1966:10:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$returns$__$",
                        "typeString": "function (bool)"
                      }
                    },
                    "id": 38208,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1966:45:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38209,
                  "nodeType": "ExpressionStatement",
                  "src": "1966:45:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 38213,
                            "name": "asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38030,
                            "src": "2056:5:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 38211,
                            "name": "accountant",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38045,
                            "src": "2030:10:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                              "typeString": "contract NFTRecoveryAccountantHarness"
                            }
                          },
                          "id": 38212,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalRecovered",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 33040,
                          "src": "2030:25:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 38214,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2030:32:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 38215,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2064:1:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 38210,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 514,
                      "src": "2021:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 38216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2021:45:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38217,
                  "nodeType": "ExpressionStatement",
                  "src": "2021:45:51"
                }
              ]
            },
            "functionSelector": "a021789a",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_initValues",
            "parameters": {
              "id": 38113,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1268:2:51"
            },
            "returnParameters": {
              "id": 38114,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1278:0:51"
            },
            "scope": 38515,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 38342,
            "nodeType": "FunctionDefinition",
            "src": "2079:1116:51",
            "body": {
              "id": 38341,
              "nodeType": "Block",
              "src": "2109:1086:51",
              "statements": [
                {
                  "assignments": [
                    38223
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 38223,
                      "mutability": "mutable",
                      "name": "_id",
                      "nodeType": "VariableDeclaration",
                      "scope": 38341,
                      "src": "2119:11:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 38222,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2119:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 38227,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 38224,
                        "name": "accountant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38045,
                        "src": "2133:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                          "typeString": "contract NFTRecoveryAccountantHarness"
                        }
                      },
                      "id": 38225,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "nextID",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32833,
                      "src": "2133:17:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 38226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2133:19:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2119:33:51"
                },
                {
                  "assignments": [
                    38229
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 38229,
                      "mutability": "mutable",
                      "name": "_prevTotal",
                      "nodeType": "VariableDeclaration",
                      "scope": 38341,
                      "src": "2162:18:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 38228,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2162:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 38234,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 38232,
                        "name": "asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38030,
                        "src": "2206:5:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 38230,
                        "name": "accountant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38045,
                        "src": "2183:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                          "typeString": "contract NFTRecoveryAccountantHarness"
                        }
                      },
                      "id": 38231,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalMinted",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32843,
                      "src": "2183:22:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 38233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2183:29:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2162:50:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e",
                        "id": 38238,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2275:43:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397",
                          "typeString": "literal_string \"ERC721: owner query for nonexistent token\""
                        },
                        "value": "ERC721: owner query for nonexistent token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397",
                          "typeString": "literal_string \"ERC721: owner query for nonexistent token\""
                        }
                      ],
                      "expression": {
                        "id": 38235,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "2259:2:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 38237,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectRevert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6481,
                      "src": "2259:15:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory) external"
                      }
                    },
                    "id": 38239,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2259:60:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38240,
                  "nodeType": "ExpressionStatement",
                  "src": "2259:60:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 38244,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38223,
                        "src": "2348:3:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 38241,
                        "name": "accountant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38045,
                        "src": "2329:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                          "typeString": "contract NFTRecoveryAccountantHarness"
                        }
                      },
                      "id": 38243,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "ownerOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 23850,
                      "src": "2329:18:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (uint256) view external returns (address)"
                      }
                    },
                    "id": 38245,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2329:23:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 38246,
                  "nodeType": "ExpressionStatement",
                  "src": "2329:23:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "74727565",
                        "id": 38250,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2414:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "hexValue": "74727565",
                        "id": 38251,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2420:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "hexValue": "74727565",
                        "id": 38252,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2426:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "hexValue": "74727565",
                        "id": 38253,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2432:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      },
                      {
                        "arguments": [
                          {
                            "id": 38256,
                            "name": "accountant",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38045,
                            "src": "2446:10:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                              "typeString": "contract NFTRecoveryAccountantHarness"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                              "typeString": "contract NFTRecoveryAccountantHarness"
                            }
                          ],
                          "id": 38255,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2438:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 38254,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2438:7:51",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 38257,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2438:19:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 38247,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "2400:2:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 38249,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectEmit",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6527,
                      "src": "2400:13:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_address_$returns$__$",
                        "typeString": "function (bool,bool,bool,bool,address) external"
                      }
                    },
                    "id": 38258,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2400:58:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38259,
                  "nodeType": "ExpressionStatement",
                  "src": "2400:58:51"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 38261,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38223,
                        "src": "2488:3:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 38262,
                        "name": "asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38030,
                        "src": "2493:5:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 38263,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38032,
                        "src": "2500:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 38264,
                        "name": "amnt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38041,
                        "src": "2506:4:51",
                        "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": 38260,
                      "name": "ProcessFailure",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38058,
                      "src": "2473:14:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,address,address,uint256)"
                      }
                    },
                    "id": 38265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2473:38:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38266,
                  "nodeType": "EmitStatement",
                  "src": "2468:43:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 38270,
                        "name": "asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38030,
                        "src": "2539:5:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 38271,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38032,
                        "src": "2546:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 38272,
                        "name": "amnt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38041,
                        "src": "2552:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 38267,
                        "name": "accountant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38045,
                        "src": "2521:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                          "typeString": "contract NFTRecoveryAccountantHarness"
                        }
                      },
                      "id": 38269,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "record",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32792,
                      "src": "2521:17:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256) external"
                      }
                    },
                    "id": 38273,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2521:36:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38274,
                  "nodeType": "ExpressionStatement",
                  "src": "2521:36:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 38278,
                            "name": "_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38223,
                            "src": "2633:3:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 38276,
                            "name": "accountant",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38045,
                            "src": "2614:10:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                              "typeString": "contract NFTRecoveryAccountantHarness"
                            }
                          },
                          "id": 38277,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "ownerOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 23850,
                          "src": "2614:18:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$",
                            "typeString": "function (uint256) view external returns (address)"
                          }
                        },
                        "id": 38279,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2614:23:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 38280,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38032,
                        "src": "2639:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 38275,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 320,
                      "src": "2605:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 38281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2605:39:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38282,
                  "nodeType": "ExpressionStatement",
                  "src": "2605:39:51"
                },
                {
                  "assignments": [
                    38284,
                    38286,
                    38288,
                    38290
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 38284,
                      "mutability": "mutable",
                      "name": "nftAsset",
                      "nodeType": "VariableDeclaration",
                      "scope": 38341,
                      "src": "2703:16:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 38283,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2703:7:51",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 38286,
                      "mutability": "mutable",
                      "name": "nftAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 38341,
                      "src": "2733:16:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      },
                      "typeName": {
                        "id": 38285,
                        "name": "uint96",
                        "nodeType": "ElementaryTypeName",
                        "src": "2733:6:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint96",
                          "typeString": "uint96"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 38288,
                      "mutability": "mutable",
                      "name": "nftOriginalUser",
                      "nodeType": "VariableDeclaration",
                      "scope": 38341,
                      "src": "2763:23:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 38287,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2763:7:51",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 38290,
                      "mutability": "mutable",
                      "name": "nftRecovered",
                      "nodeType": "VariableDeclaration",
                      "scope": 38341,
                      "src": "2800:19:51",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      },
                      "typeName": {
                        "id": 38289,
                        "name": "uint96",
                        "nodeType": "ElementaryTypeName",
                        "src": "2800:6:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint96",
                          "typeString": "uint96"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 38295,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 38293,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38223,
                        "src": "2851:3:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 38291,
                        "name": "accountant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38045,
                        "src": "2832:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                          "typeString": "contract NFTRecoveryAccountantHarness"
                        }
                      },
                      "id": 38292,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "records",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32838,
                      "src": "2832:18:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$_t_uint96_$_t_address_$_t_uint96_$",
                        "typeString": "function (uint256) view external returns (address,uint96,address,uint96)"
                      }
                    },
                    "id": 38294,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2832:23:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_address_$_t_uint96_$_t_address_$_t_uint96_$",
                      "typeString": "tuple(address,uint96,address,uint96)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2689:166:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 38297,
                        "name": "nftAsset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38284,
                        "src": "2874:8:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 38298,
                        "name": "asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38030,
                        "src": "2884:5:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 38296,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 320,
                      "src": "2865:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 38299,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2865:25:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38300,
                  "nodeType": "ExpressionStatement",
                  "src": "2865:25:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 38304,
                            "name": "nftAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38286,
                            "src": "2917:9:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          ],
                          "id": 38303,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2909:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 38302,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "2909:7:51",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 38305,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2909:18:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 38306,
                        "name": "amnt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38041,
                        "src": "2929:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 38301,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 514,
                      "src": "2900:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 38307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2900:34:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38308,
                  "nodeType": "ExpressionStatement",
                  "src": "2900:34:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 38310,
                        "name": "nftOriginalUser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38288,
                        "src": "2953:15:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 38311,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38032,
                        "src": "2970:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 38309,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 320,
                      "src": "2944:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 38312,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2944:31:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38313,
                  "nodeType": "ExpressionStatement",
                  "src": "2944:31:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 38317,
                            "name": "nftRecovered",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38290,
                            "src": "3002:12:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          ],
                          "id": 38316,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2994:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 38315,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "2994:7:51",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 38318,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2994:21:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 38319,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3017:1:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 38314,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 514,
                      "src": "2985:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 38320,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2985:34:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38321,
                  "nodeType": "ExpressionStatement",
                  "src": "2985:34:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 38323,
                            "name": "accountant",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38045,
                            "src": "3091:10:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                              "typeString": "contract NFTRecoveryAccountantHarness"
                            }
                          },
                          "id": 38324,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "nextID",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32833,
                          "src": "3091:17:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                            "typeString": "function () view external returns (uint256)"
                          }
                        },
                        "id": 38325,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3091:19:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 38328,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 38326,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 38223,
                          "src": "3112:3:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 38327,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3118:1:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "3112:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 38322,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 514,
                      "src": "3082:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 38329,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3082:38:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38330,
                  "nodeType": "ExpressionStatement",
                  "src": "3082:38:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 38334,
                            "name": "asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38030,
                            "src": "3162:5:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 38332,
                            "name": "accountant",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 38045,
                            "src": "3139:10:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                              "typeString": "contract NFTRecoveryAccountantHarness"
                            }
                          },
                          "id": 38333,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalMinted",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 32843,
                          "src": "3139:22:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 38335,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3139:29:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 38338,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 38336,
                          "name": "_prevTotal",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 38229,
                          "src": "3170:10:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "id": 38337,
                          "name": "amnt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 38041,
                          "src": "3183:4:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3170:17:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 38331,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 514,
                      "src": "3130:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 38339,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3130:58:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38340,
                  "nodeType": "ExpressionStatement",
                  "src": "3130:58:51"
                }
              ]
            },
            "functionSelector": "dc2d1d5a",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "recordCheck",
            "parameters": {
              "id": 38220,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2099:2:51"
            },
            "returnParameters": {
              "id": 38221,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2109:0:51"
            },
            "scope": 38515,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 38349,
            "nodeType": "FunctionDefinition",
            "src": "3201:65:51",
            "body": {
              "id": 38348,
              "nodeType": "Block",
              "src": "3236:30:51",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 38345,
                      "name": "recordCheck",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38342,
                      "src": "3246:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 38346,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3246:13:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38347,
                  "nodeType": "ExpressionStatement",
                  "src": "3246:13:51"
                }
              ]
            },
            "functionSelector": "446692b4",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_recordCheck",
            "parameters": {
              "id": 38343,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3226:2:51"
            },
            "returnParameters": {
              "id": 38344,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3236:0:51"
            },
            "scope": 38515,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 38359,
            "nodeType": "FunctionDefinition",
            "src": "3272:92:51",
            "body": {
              "id": 38358,
              "nodeType": "Block",
              "src": "3311:53:51",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 38352,
                      "name": "recordCheck",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38342,
                      "src": "3321:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 38353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3321:13:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38354,
                  "nodeType": "ExpressionStatement",
                  "src": "3321:13:51"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 38355,
                      "name": "recordCheck",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38342,
                      "src": "3344:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 38356,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3344:13:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38357,
                  "nodeType": "ExpressionStatement",
                  "src": "3344:13:51"
                }
              ]
            },
            "functionSelector": "4a0f652e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_mintTwoSameUser",
            "parameters": {
              "id": 38350,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3301:2:51"
            },
            "returnParameters": {
              "id": 38351,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3311:0:51"
            },
            "scope": 38515,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 38376,
            "nodeType": "FunctionDefinition",
            "src": "3370:128:51",
            "body": {
              "id": 38375,
              "nodeType": "Block",
              "src": "3414:84:51",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 38362,
                      "name": "recordCheck",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38342,
                      "src": "3424:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 38363,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3424:13:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38364,
                  "nodeType": "ExpressionStatement",
                  "src": "3424:13:51"
                },
                {
                  "expression": {
                    "id": 38370,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 38365,
                      "name": "user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38032,
                      "src": "3447:4:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "3132333435",
                          "id": 38368,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3462:5:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_12345_by_1",
                            "typeString": "int_const 12345"
                          },
                          "value": "12345"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_12345_by_1",
                            "typeString": "int_const 12345"
                          }
                        ],
                        "expression": {
                          "id": 38366,
                          "name": "vm",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1816,
                          "src": "3454:2:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Vm_$6909",
                            "typeString": "contract Vm"
                          }
                        },
                        "id": 38367,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "addr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6287,
                        "src": "3454:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_address_$",
                          "typeString": "function (uint256) external returns (address)"
                        }
                      },
                      "id": 38369,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3454:14:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3447:21:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 38371,
                  "nodeType": "ExpressionStatement",
                  "src": "3447:21:51"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 38372,
                      "name": "recordCheck",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38342,
                      "src": "3478:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 38373,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3478:13:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38374,
                  "nodeType": "ExpressionStatement",
                  "src": "3478:13:51"
                }
              ]
            },
            "functionSelector": "d559c890",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_mintTwoDifferentUser",
            "parameters": {
              "id": 38360,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3404:2:51"
            },
            "returnParameters": {
              "id": 38361,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3414:0:51"
            },
            "scope": 38515,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 38400,
            "nodeType": "FunctionDefinition",
            "src": "3504:207:51",
            "body": {
              "id": 38399,
              "nodeType": "Block",
              "src": "3550:161:51",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 38379,
                      "name": "recordCheck",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38342,
                      "src": "3560:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 38380,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3560:13:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38381,
                  "nodeType": "ExpressionStatement",
                  "src": "3560:13:51"
                },
                {
                  "expression": {
                    "id": 38387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 38382,
                      "name": "asset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38030,
                      "src": "3583:5:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "3132333435",
                          "id": 38385,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3599:5:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_12345_by_1",
                            "typeString": "int_const 12345"
                          },
                          "value": "12345"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_12345_by_1",
                            "typeString": "int_const 12345"
                          }
                        ],
                        "expression": {
                          "id": 38383,
                          "name": "vm",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1816,
                          "src": "3591:2:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Vm_$6909",
                            "typeString": "contract Vm"
                          }
                        },
                        "id": 38384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "addr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6287,
                        "src": "3591:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_address_$",
                          "typeString": "function (uint256) external returns (address)"
                        }
                      },
                      "id": 38386,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3591:14:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3583:22:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 38388,
                  "nodeType": "ExpressionStatement",
                  "src": "3583:22:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 38392,
                        "name": "asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38030,
                        "src": "3652:5:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 38393,
                        "name": "AFFECTED_TOKEN_AMOUNT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38048,
                        "src": "3659:21:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 38389,
                        "name": "accountant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38045,
                        "src": "3615:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                          "typeString": "contract NFTRecoveryAccountantHarness"
                        }
                      },
                      "id": 38391,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "exposed_setAffectedAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 42065,
                      "src": "3615:36:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 38394,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3615:66:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38395,
                  "nodeType": "ExpressionStatement",
                  "src": "3615:66:51"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 38396,
                      "name": "recordCheck",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38342,
                      "src": "3691:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 38397,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3691:13:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38398,
                  "nodeType": "ExpressionStatement",
                  "src": "3691:13:51"
                }
              ]
            },
            "functionSelector": "1326b0c2",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_mintTwoDifferentAssets",
            "parameters": {
              "id": 38377,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3540:2:51"
            },
            "returnParameters": {
              "id": 38378,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3550:0:51"
            },
            "scope": 38515,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 38424,
            "nodeType": "FunctionDefinition",
            "src": "3717:180:51",
            "body": {
              "id": 38423,
              "nodeType": "Block",
              "src": "3765:132:51",
              "statements": [
                {
                  "expression": {
                    "id": 38407,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 38403,
                      "name": "amnt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38041,
                      "src": "3775:4:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 38406,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 38404,
                        "name": "AFFECTED_TOKEN_AMOUNT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38048,
                        "src": "3782:21:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "hexValue": "32",
                        "id": 38405,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3806:1:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      },
                      "src": "3782:25:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3775:32:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 38408,
                  "nodeType": "ExpressionStatement",
                  "src": "3775:32:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "6f7665726d696e74",
                        "id": 38412,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3833:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_76beae41b64258c540c9f2e99968e43d7d30dc15c6949f84d5466099ab74e038",
                          "typeString": "literal_string \"overmint\""
                        },
                        "value": "overmint"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_76beae41b64258c540c9f2e99968e43d7d30dc15c6949f84d5466099ab74e038",
                          "typeString": "literal_string \"overmint\""
                        }
                      ],
                      "expression": {
                        "id": 38409,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "3817:2:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 38411,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectRevert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6481,
                      "src": "3817:15:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory) external"
                      }
                    },
                    "id": 38413,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3817:27:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38414,
                  "nodeType": "ExpressionStatement",
                  "src": "3817:27:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 38418,
                        "name": "asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38030,
                        "src": "3872:5:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 38419,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38032,
                        "src": "3879:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 38420,
                        "name": "amnt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38041,
                        "src": "3885:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 38415,
                        "name": "accountant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38045,
                        "src": "3854:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                          "typeString": "contract NFTRecoveryAccountantHarness"
                        }
                      },
                      "id": 38417,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "record",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32792,
                      "src": "3854:17:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256) external"
                      }
                    },
                    "id": 38421,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3854:36:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38422,
                  "nodeType": "ExpressionStatement",
                  "src": "3854:36:51"
                }
              ]
            },
            "functionSelector": "7fab4950",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_dontMintMoreThanAffected",
            "parameters": {
              "id": 38401,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3755:2:51"
            },
            "returnParameters": {
              "id": 38402,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3765:0:51"
            },
            "scope": 38515,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 38449,
            "nodeType": "FunctionDefinition",
            "src": "3903:162:51",
            "body": {
              "id": 38448,
              "nodeType": "Block",
              "src": "3946:119:51",
              "statements": [
                {
                  "expression": {
                    "id": 38432,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 38427,
                      "name": "asset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38030,
                      "src": "3956:5:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "3939",
                          "id": 38430,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3972:2:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_99_by_1",
                            "typeString": "int_const 99"
                          },
                          "value": "99"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_99_by_1",
                            "typeString": "int_const 99"
                          }
                        ],
                        "expression": {
                          "id": 38428,
                          "name": "vm",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1816,
                          "src": "3964:2:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Vm_$6909",
                            "typeString": "contract Vm"
                          }
                        },
                        "id": 38429,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "addr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6287,
                        "src": "3964:7:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_address_$",
                          "typeString": "function (uint256) external returns (address)"
                        }
                      },
                      "id": 38431,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3964:11:51",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3956:19:51",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 38433,
                  "nodeType": "ExpressionStatement",
                  "src": "3956:19:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "6f7665726d696e74",
                        "id": 38437,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4001:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_76beae41b64258c540c9f2e99968e43d7d30dc15c6949f84d5466099ab74e038",
                          "typeString": "literal_string \"overmint\""
                        },
                        "value": "overmint"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_76beae41b64258c540c9f2e99968e43d7d30dc15c6949f84d5466099ab74e038",
                          "typeString": "literal_string \"overmint\""
                        }
                      ],
                      "expression": {
                        "id": 38434,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "3985:2:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 38436,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectRevert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6481,
                      "src": "3985:15:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory) external"
                      }
                    },
                    "id": 38438,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3985:27:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38439,
                  "nodeType": "ExpressionStatement",
                  "src": "3985:27:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 38443,
                        "name": "asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38030,
                        "src": "4040:5:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 38444,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38032,
                        "src": "4047:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 38445,
                        "name": "amnt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38041,
                        "src": "4053:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 38440,
                        "name": "accountant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38045,
                        "src": "4022:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                          "typeString": "contract NFTRecoveryAccountantHarness"
                        }
                      },
                      "id": 38442,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "record",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32792,
                      "src": "4022:17:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256) external"
                      }
                    },
                    "id": 38446,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4022:36:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38447,
                  "nodeType": "ExpressionStatement",
                  "src": "4022:36:51"
                }
              ]
            },
            "functionSelector": "9d99ec16",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_dontMintRandomAsset",
            "parameters": {
              "id": 38425,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3936:2:51"
            },
            "returnParameters": {
              "id": 38426,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3946:0:51"
            },
            "scope": 38515,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 38514,
            "nodeType": "FunctionDefinition",
            "src": "4071:395:51",
            "body": {
              "id": 38513,
              "nodeType": "Block",
              "src": "4106:360:51",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 38452,
                      "name": "recordCheck",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 38342,
                      "src": "4116:11:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 38453,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4116:13:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38454,
                  "nodeType": "ExpressionStatement",
                  "src": "4116:13:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 38458,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38032,
                        "src": "4148:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 38455,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "4139:2:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 38457,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "prank",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6440,
                      "src": "4139:8:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 38459,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4139:14:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38460,
                  "nodeType": "ExpressionStatement",
                  "src": "4139:14:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "6e6f207472616e7366657273",
                        "id": 38464,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4179:14:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_02aaa93344ce36827919ee7613bf5a0bbdbf5bab3149312b44f785458d9f24c4",
                          "typeString": "literal_string \"no transfers\""
                        },
                        "value": "no transfers"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_02aaa93344ce36827919ee7613bf5a0bbdbf5bab3149312b44f785458d9f24c4",
                          "typeString": "literal_string \"no transfers\""
                        }
                      ],
                      "expression": {
                        "id": 38461,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "4163:2:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 38463,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectRevert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6481,
                      "src": "4163:15:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory) external"
                      }
                    },
                    "id": 38465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4163:31:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38466,
                  "nodeType": "ExpressionStatement",
                  "src": "4163:31:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 38470,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38032,
                        "src": "4228:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "3939",
                            "id": 38473,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4242:2:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_99_by_1",
                              "typeString": "int_const 99"
                            },
                            "value": "99"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_99_by_1",
                              "typeString": "int_const 99"
                            }
                          ],
                          "expression": {
                            "id": 38471,
                            "name": "vm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1816,
                            "src": "4234:2:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Vm_$6909",
                              "typeString": "contract Vm"
                            }
                          },
                          "id": 38472,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "addr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6287,
                          "src": "4234:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_address_$",
                            "typeString": "function (uint256) external returns (address)"
                          }
                        },
                        "id": 38474,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4234:11:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 38475,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4247:1:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "expression": {
                        "id": 38467,
                        "name": "accountant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38045,
                        "src": "4204:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                          "typeString": "contract NFTRecoveryAccountantHarness"
                        }
                      },
                      "id": 38469,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32979,
                      "src": "4204:23:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256) external"
                      }
                    },
                    "id": 38476,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4204:45:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38477,
                  "nodeType": "ExpressionStatement",
                  "src": "4204:45:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "6e6f207472616e7366657273",
                        "id": 38481,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4275:14:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_02aaa93344ce36827919ee7613bf5a0bbdbf5bab3149312b44f785458d9f24c4",
                          "typeString": "literal_string \"no transfers\""
                        },
                        "value": "no transfers"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_02aaa93344ce36827919ee7613bf5a0bbdbf5bab3149312b44f785458d9f24c4",
                          "typeString": "literal_string \"no transfers\""
                        }
                      ],
                      "expression": {
                        "id": 38478,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "4259:2:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 38480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectRevert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6481,
                      "src": "4259:15:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory) external"
                      }
                    },
                    "id": 38482,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4259:31:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38483,
                  "nodeType": "ExpressionStatement",
                  "src": "4259:31:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 38487,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38032,
                        "src": "4328:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "3939",
                            "id": 38490,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4342:2:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_99_by_1",
                              "typeString": "int_const 99"
                            },
                            "value": "99"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_99_by_1",
                              "typeString": "int_const 99"
                            }
                          ],
                          "expression": {
                            "id": 38488,
                            "name": "vm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1816,
                            "src": "4334:2:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Vm_$6909",
                              "typeString": "contract Vm"
                            }
                          },
                          "id": 38489,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "addr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6287,
                          "src": "4334:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_address_$",
                            "typeString": "function (uint256) external returns (address)"
                          }
                        },
                        "id": 38491,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4334:11:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 38492,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4347:1:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "expression": {
                        "id": 38484,
                        "name": "accountant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38045,
                        "src": "4300:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                          "typeString": "contract NFTRecoveryAccountantHarness"
                        }
                      },
                      "id": 38486,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32994,
                      "src": "4300:27:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256) external"
                      }
                    },
                    "id": 38493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4300:49:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38494,
                  "nodeType": "ExpressionStatement",
                  "src": "4300:49:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "6e6f207472616e7366657273",
                        "id": 38498,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4375:14:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_02aaa93344ce36827919ee7613bf5a0bbdbf5bab3149312b44f785458d9f24c4",
                          "typeString": "literal_string \"no transfers\""
                        },
                        "value": "no transfers"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_02aaa93344ce36827919ee7613bf5a0bbdbf5bab3149312b44f785458d9f24c4",
                          "typeString": "literal_string \"no transfers\""
                        }
                      ],
                      "expression": {
                        "id": 38495,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "4359:2:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 38497,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "expectRevert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6481,
                      "src": "4359:15:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory) external"
                      }
                    },
                    "id": 38499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4359:31:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38500,
                  "nodeType": "ExpressionStatement",
                  "src": "4359:31:51"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 38504,
                        "name": "user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38032,
                        "src": "4428:4:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "3939",
                            "id": 38507,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4442:2:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_99_by_1",
                              "typeString": "int_const 99"
                            },
                            "value": "99"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_99_by_1",
                              "typeString": "int_const 99"
                            }
                          ],
                          "expression": {
                            "id": 38505,
                            "name": "vm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1816,
                            "src": "4434:2:51",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Vm_$6909",
                              "typeString": "contract Vm"
                            }
                          },
                          "id": 38506,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "addr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6287,
                          "src": "4434:7:51",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_address_$",
                            "typeString": "function (uint256) external returns (address)"
                          }
                        },
                        "id": 38508,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4434:11:51",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 38509,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4447:1:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "hexValue": "307831323334",
                        "id": 38510,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4450:8:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1ac7d1b81b7ba1025b36ccb86723da6ee5a87259f1c2fd5abe69d3200b512ec8",
                          "typeString": "literal_string \"0x1234\""
                        },
                        "value": "0x1234"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1ac7d1b81b7ba1025b36ccb86723da6ee5a87259f1c2fd5abe69d3200b512ec8",
                          "typeString": "literal_string \"0x1234\""
                        }
                      ],
                      "expression": {
                        "id": 38501,
                        "name": "accountant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 38045,
                        "src": "4400:10:51",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_NFTRecoveryAccountantHarness_$42076",
                          "typeString": "contract NFTRecoveryAccountantHarness"
                        }
                      },
                      "id": 38503,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 33011,
                      "src": "4400:27:51",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,uint256,bytes memory) external"
                      }
                    },
                    "id": 38511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4400:59:51",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 38512,
                  "nodeType": "ExpressionStatement",
                  "src": "4400:59:51"
                }
              ]
            },
            "functionSelector": "591ddb27",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "test_noTransfers",
            "parameters": {
              "id": 38450,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4096:2:51"
            },
            "returnParameters": {
              "id": 38451,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4106:0:51"
            },
            "scope": 38515,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 38027,
              "name": "Test",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4902,
              "src": "451:4:51",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Test_$4902",
                "typeString": "contract Test"
              }
            },
            "id": 38028,
            "nodeType": "InheritanceSpecifier",
            "src": "451:4:51"
          }
        ],
        "contractDependencies": [
          1786,
          2021,
          4902,
          26936,
          42076
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          38515,
          4902,
          2021,
          1786
        ],
        "name": "NFTAccountantTest",
        "scope": 38516
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 51
}