{
  "_format": "hh-sol-artifact-1",
  "contractName": "NFT",
  "sourceName": "contracts/Mocks/NFT.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "ApprovalCallerNotOwnerNorApproved",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ApprovalQueryForNonexistentToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ApprovalToCurrentOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ApproveToCaller",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BalanceQueryForZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MintToZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MintZeroQuantity",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OwnerQueryForNonexistentToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferCallerNotOwnerNorApproved",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferFromIncorrectOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferToNonERC721ReceiverImplementer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferToZeroAddress",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "freeze",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "frozen",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "description",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "image",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "description",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "image",
          "type": "string"
        }
      ],
      "name": "updateMetadata",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526008805460ff60a01b191690553480156200001e57600080fd5b5060408051808201825260038082526213919560ea1b6020808401828152855180870190965292855284015281519192916200005d91600291620000de565b50805162000073906003906020840190620000de565b505060016000555062000086336200008c565b620001c1565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000ec9062000184565b90600052602060002090601f0160209004810192826200011057600085556200015b565b82601f106200012b57805160ff19168380011785556200015b565b828001600101855582156200015b579182015b828111156200015b5782518255916020019190600101906200013e565b50620001699291506200016d565b5090565b5b808211156200016957600081556001016200016e565b600181811c908216806200019957607f821691505b60208210811415620001bb57634e487b7160e01b600052602260045260246000fd5b50919050565b611d3580620001d16000396000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80636352211e116100d8578063a22cb4651161008c578063c87b56dd11610066578063c87b56dd146102e8578063e985e9c5146102fb578063f2fde38b1461033757600080fd5b8063a22cb465146102af578063b88d4fde146102c2578063c401aa99146102d557600080fd5b8063715018a6116100bd578063715018a61461028e5780638da5cb5b1461029657806395d89b41146102a757600080fd5b80636352211e1461026857806370a082311461027b57600080fd5b806318160ddd1161012f5780632aedc3f9116101145780632aedc3f91461023a57806342842e0e1461024d57806362a5af3b1461026057600080fd5b806318160ddd1461020d57806323b872dd1461022757600080fd5b806306fdde031161016057806306fdde03146101b8578063081812fc146101cd578063095ea7b3146101f857600080fd5b806301ffc9a71461017c578063054f7d9c146101a4575b600080fd5b61018f61018a3660046118cf565b61034a565b60405190151581526020015b60405180910390f35b60085461018f90600160a01b900460ff1681565b6101c061039c565b60405161019b9190611bb2565b6101e06101db36600461199c565b61042e565b6040516001600160a01b03909116815260200161019b565b61020b6102063660046118a6565b610472565b005b60015460005403600019015b60405190815260200161019b565b61020b6102353660046117b8565b610500565b61020b610248366004611907565b61050b565b61020b61025b3660046117b8565b6105f2565b61020b61060d565b6101e061027636600461199c565b610697565b61021961028936600461176c565b6106a9565b61020b6106f8565b6008546001600160a01b03166101e0565b6101c061075e565b61020b6102bd36600461186c565b61076d565b61020b6102d03660046117f3565b610803565b61020b6102e33660046119b4565b61084e565b6101c06102f636600461199c565b6109f7565b61018f610309366004611786565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b61020b61034536600461176c565b610c97565b60006001600160e01b031982166380ac58cd60e01b148061037b57506001600160e01b03198216635b5e139f60e01b145b8061039657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600280546103ab90611c48565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790611c48565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050905090565b600061043982610d79565b610456576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061047d82610697565b9050806001600160a01b0316836001600160a01b031614156104b25760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906104d257506104d08133610309565b155b156104f0576040516367d9dca160e11b815260040160405180910390fd5b6104fb838383610db2565b505050565b6104fb838383610e1b565b6008546001600160a01b0316331461056a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b604080516060810182528581526020808201869052818301859052600080548152600982529290922081518051929391926105a8928492019061161b565b5060208281015180516105c1926001850192019061161b565b50604082015180516105dd91600284019160209091019061161b565b509050506105ec816001611031565b50505050565b6104fb83838360405180602001604052806000815250610803565b6008546001600160a01b031633146106675760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610561565b600880547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b179055565b60006106a28261104f565b5192915050565b60006001600160a01b0382166106d2576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b031633146107525760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610561565b61075c6000611178565b565b6060600380546103ab90611c48565b6001600160a01b0382163314156107975760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61080e848484610e1b565b6001600160a01b0383163b15158015610830575061082e848484846111d7565b155b156105ec576040516368d2bf6b60e11b815260040160405180910390fd5b8361085881610d79565b6108bc5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610561565b6008546001600160a01b031633146109165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610561565b600854600160a01b900460ff161561097b5760405162461bcd60e51b815260206004820152602260248201527f4552433732314d657461646174613a206d657461646174612069732066726f7a60448201526132b760f11b6064820152608401610561565b6040805160608101825285815260208082018690528183018590526000888152600982529290922081518051929391926109b8928492019061161b565b5060208281015180516109d1926001850192019061161b565b50604082015180516109ed91600284019160209091019061161b565b5050505050505050565b606081610a0381610d79565b610a675760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610561565b600083815260096020526040808220815160608101909252805482908290610a8e90611c48565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba90611c48565b8015610b075780601f10610adc57610100808354040283529160200191610b07565b820191906000526020600020905b815481529060010190602001808311610aea57829003601f168201915b50505050508152602001600182018054610b2090611c48565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4c90611c48565b8015610b995780601f10610b6e57610100808354040283529160200191610b99565b820191906000526020600020905b815481529060010190602001808311610b7c57829003601f168201915b50505050508152602001600282018054610bb290611c48565b80601f0160208091040260200160405190810160405280929190818152602001828054610bde90611c48565b8015610c2b5780601f10610c0057610100808354040283529160200191610c2b565b820191906000526020600020905b815481529060010190602001808311610c0e57829003601f168201915b5050505050815250509050610c6e816000015182602001518360400151604051602001610c5a93929190611a62565b6040516020818303038152906040526112ce565b604051602001610c7e9190611b31565b6040516020818303038152906040529250505b50919050565b6008546001600160a01b03163314610cf15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610561565b6001600160a01b038116610d6d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610561565b610d7681611178565b50565b600081600111158015610d8d575060005482105b8015610396575050600090815260046020526040902054600160e01b900460ff161590565b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000610e268261104f565b80519091506000906001600160a01b0316336001600160a01b03161480610e5457508151610e549033610309565b80610e6f575033610e648461042e565b6001600160a01b0316145b905080610e8f57604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b031614610ec45760405162a1148160e81b815260040160405180910390fd5b6001600160a01b038416610eeb57604051633a954ecd60e21b815260040160405180910390fd5b610efb6000848460000151610db2565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b429092169190910217909255908601808352912054909116610fe757600054811015610fe7578251600082815260046020908152604090912080549186015167ffffffffffffffff16600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b61104b828260405180602001604052806000815250611442565b5050565b6040805160608101825260008082526020820181905291810191909152818060011115801561107f575060005481105b1561115f57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff1615159181018290529061115d5780516001600160a01b0316156110f3579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff1615159281019290925215611158579392505050565b6110f3565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061120c903390899088908890600401611b76565b602060405180830381600087803b15801561122657600080fd5b505af1925050508015611256575060408051601f3d908101601f19168201909252611253918101906118eb565b60015b6112b1573d808015611284576040519150601f19603f3d011682016040523d82523d6000602084013e611289565b606091505b5080516112a9576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b60608151600014156112ee57505060408051602081019091526000815290565b6000604051806060016040528060408152602001611cc0604091399050600060038451600261131d9190611bc5565b6113279190611bdd565b611332906004611bfd565b90506000611341826020611bc5565b67ffffffffffffffff81111561136757634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611391576020820181803683370190505b509050818152600183018586518101602084015b818310156113fd576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f81168501518253506001016113a5565b600389510660018114611417576002811461142857611434565b613d3d60f01b600119830152611434565b603d60f81b6000198301525b509398975050505050505050565b6104fb83838360016000546001600160a01b03851661147357604051622e076360e81b815260040160405180910390fd5b836114915760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561154357506001600160a01b0387163b15155b156115cc575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461159460008884806001019550886111d7565b6115b1576040516368d2bf6b60e11b815260040160405180910390fd5b808214156115495782600054146115c757600080fd5b611612565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156115cd575b5060005561102a565b82805461162790611c48565b90600052602060002090601f016020900481019282611649576000855561168f565b82601f1061166257805160ff191683800117855561168f565b8280016001018555821561168f579182015b8281111561168f578251825591602001919060010190611674565b5061169b92915061169f565b5090565b5b8082111561169b57600081556001016116a0565b600067ffffffffffffffff808411156116cf576116cf611c93565b604051601f8501601f19908116603f011681019082821181831017156116f7576116f7611c93565b8160405280935085815286868601111561171057600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461174157600080fd5b919050565b600082601f830112611756578081fd5b611765838335602085016116b4565b9392505050565b60006020828403121561177d578081fd5b6117658261172a565b60008060408385031215611798578081fd5b6117a18361172a565b91506117af6020840161172a565b90509250929050565b6000806000606084860312156117cc578081fd5b6117d58461172a565b92506117e36020850161172a565b9150604084013590509250925092565b60008060008060808587031215611808578081fd5b6118118561172a565b935061181f6020860161172a565b925060408501359150606085013567ffffffffffffffff811115611841578182fd5b8501601f81018713611851578182fd5b611860878235602084016116b4565b91505092959194509250565b6000806040838503121561187e578182fd5b6118878361172a565b91506020830135801515811461189b578182fd5b809150509250929050565b600080604083850312156118b8578182fd5b6118c18361172a565b946020939093013593505050565b6000602082840312156118e0578081fd5b813561176581611ca9565b6000602082840312156118fc578081fd5b815161176581611ca9565b6000806000806080858703121561191c578384fd5b843567ffffffffffffffff80821115611933578586fd5b61193f88838901611746565b95506020870135915080821115611954578485fd5b61196088838901611746565b94506040870135915080821115611975578384fd5b5061198287828801611746565b9250506119916060860161172a565b905092959194509250565b6000602082840312156119ad578081fd5b5035919050565b600080600080608085870312156119c9578384fd5b84359350602085013567ffffffffffffffff808211156119e7578485fd5b6119f388838901611746565b94506040870135915080821115611a08578384fd5b611a1488838901611746565b93506060870135915080821115611a29578283fd5b5061186087828801611746565b60008151808452611a4e816020860160208601611c1c565b601f01601f19169290920160200192915050565b7f7b226e616d65223a220000000000000000000000000000000000000000000000815260008451611a9a816009850160208901611c1c565b7f222c20226465736372697074696f6e223a2200000000000000000000000000006009918401918201528451611ad781601b840160208901611c1c565b7f222c2022696d616765223a202200000000000000000000000000000000000000601b92909101918201528351611b15816028840160208801611c1c565b61227d60f01b60289290910191820152602a0195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251611b6981601d850160208701611c1c565b91909101601d0192915050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611ba86080830184611a36565b9695505050505050565b6020815260006117656020830184611a36565b60008219821115611bd857611bd8611c7d565b500190565b600082611bf857634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611c1757611c17611c7d565b500290565b60005b83811015611c37578181015183820152602001611c1f565b838111156105ec5750506000910152565b600181811c90821680611c5c57607f821691505b60208210811415610c9157634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610d7657600080fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122052d59b8ce53c25e1240b28c2c2b3f47838e6d438879c74e418d85822c533aed764736f6c63430008040033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101775760003560e01c80636352211e116100d8578063a22cb4651161008c578063c87b56dd11610066578063c87b56dd146102e8578063e985e9c5146102fb578063f2fde38b1461033757600080fd5b8063a22cb465146102af578063b88d4fde146102c2578063c401aa99146102d557600080fd5b8063715018a6116100bd578063715018a61461028e5780638da5cb5b1461029657806395d89b41146102a757600080fd5b80636352211e1461026857806370a082311461027b57600080fd5b806318160ddd1161012f5780632aedc3f9116101145780632aedc3f91461023a57806342842e0e1461024d57806362a5af3b1461026057600080fd5b806318160ddd1461020d57806323b872dd1461022757600080fd5b806306fdde031161016057806306fdde03146101b8578063081812fc146101cd578063095ea7b3146101f857600080fd5b806301ffc9a71461017c578063054f7d9c146101a4575b600080fd5b61018f61018a3660046118cf565b61034a565b60405190151581526020015b60405180910390f35b60085461018f90600160a01b900460ff1681565b6101c061039c565b60405161019b9190611bb2565b6101e06101db36600461199c565b61042e565b6040516001600160a01b03909116815260200161019b565b61020b6102063660046118a6565b610472565b005b60015460005403600019015b60405190815260200161019b565b61020b6102353660046117b8565b610500565b61020b610248366004611907565b61050b565b61020b61025b3660046117b8565b6105f2565b61020b61060d565b6101e061027636600461199c565b610697565b61021961028936600461176c565b6106a9565b61020b6106f8565b6008546001600160a01b03166101e0565b6101c061075e565b61020b6102bd36600461186c565b61076d565b61020b6102d03660046117f3565b610803565b61020b6102e33660046119b4565b61084e565b6101c06102f636600461199c565b6109f7565b61018f610309366004611786565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b61020b61034536600461176c565b610c97565b60006001600160e01b031982166380ac58cd60e01b148061037b57506001600160e01b03198216635b5e139f60e01b145b8061039657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600280546103ab90611c48565b80601f01602080910402602001604051908101604052809291908181526020018280546103d790611c48565b80156104245780601f106103f957610100808354040283529160200191610424565b820191906000526020600020905b81548152906001019060200180831161040757829003601f168201915b5050505050905090565b600061043982610d79565b610456576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061047d82610697565b9050806001600160a01b0316836001600160a01b031614156104b25760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906104d257506104d08133610309565b155b156104f0576040516367d9dca160e11b815260040160405180910390fd5b6104fb838383610db2565b505050565b6104fb838383610e1b565b6008546001600160a01b0316331461056a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b604080516060810182528581526020808201869052818301859052600080548152600982529290922081518051929391926105a8928492019061161b565b5060208281015180516105c1926001850192019061161b565b50604082015180516105dd91600284019160209091019061161b565b509050506105ec816001611031565b50505050565b6104fb83838360405180602001604052806000815250610803565b6008546001600160a01b031633146106675760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610561565b600880547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b179055565b60006106a28261104f565b5192915050565b60006001600160a01b0382166106d2576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b031633146107525760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610561565b61075c6000611178565b565b6060600380546103ab90611c48565b6001600160a01b0382163314156107975760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61080e848484610e1b565b6001600160a01b0383163b15158015610830575061082e848484846111d7565b155b156105ec576040516368d2bf6b60e11b815260040160405180910390fd5b8361085881610d79565b6108bc5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610561565b6008546001600160a01b031633146109165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610561565b600854600160a01b900460ff161561097b5760405162461bcd60e51b815260206004820152602260248201527f4552433732314d657461646174613a206d657461646174612069732066726f7a60448201526132b760f11b6064820152608401610561565b6040805160608101825285815260208082018690528183018590526000888152600982529290922081518051929391926109b8928492019061161b565b5060208281015180516109d1926001850192019061161b565b50604082015180516109ed91600284019160209091019061161b565b5050505050505050565b606081610a0381610d79565b610a675760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610561565b600083815260096020526040808220815160608101909252805482908290610a8e90611c48565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba90611c48565b8015610b075780601f10610adc57610100808354040283529160200191610b07565b820191906000526020600020905b815481529060010190602001808311610aea57829003601f168201915b50505050508152602001600182018054610b2090611c48565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4c90611c48565b8015610b995780601f10610b6e57610100808354040283529160200191610b99565b820191906000526020600020905b815481529060010190602001808311610b7c57829003601f168201915b50505050508152602001600282018054610bb290611c48565b80601f0160208091040260200160405190810160405280929190818152602001828054610bde90611c48565b8015610c2b5780601f10610c0057610100808354040283529160200191610c2b565b820191906000526020600020905b815481529060010190602001808311610c0e57829003601f168201915b5050505050815250509050610c6e816000015182602001518360400151604051602001610c5a93929190611a62565b6040516020818303038152906040526112ce565b604051602001610c7e9190611b31565b6040516020818303038152906040529250505b50919050565b6008546001600160a01b03163314610cf15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610561565b6001600160a01b038116610d6d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610561565b610d7681611178565b50565b600081600111158015610d8d575060005482105b8015610396575050600090815260046020526040902054600160e01b900460ff161590565b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000610e268261104f565b80519091506000906001600160a01b0316336001600160a01b03161480610e5457508151610e549033610309565b80610e6f575033610e648461042e565b6001600160a01b0316145b905080610e8f57604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b031614610ec45760405162a1148160e81b815260040160405180910390fd5b6001600160a01b038416610eeb57604051633a954ecd60e21b815260040160405180910390fd5b610efb6000848460000151610db2565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b429092169190910217909255908601808352912054909116610fe757600054811015610fe7578251600082815260046020908152604090912080549186015167ffffffffffffffff16600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b61104b828260405180602001604052806000815250611442565b5050565b6040805160608101825260008082526020820181905291810191909152818060011115801561107f575060005481105b1561115f57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff1615159181018290529061115d5780516001600160a01b0316156110f3579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff1615159281019290925215611158579392505050565b6110f3565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061120c903390899088908890600401611b76565b602060405180830381600087803b15801561122657600080fd5b505af1925050508015611256575060408051601f3d908101601f19168201909252611253918101906118eb565b60015b6112b1573d808015611284576040519150601f19603f3d011682016040523d82523d6000602084013e611289565b606091505b5080516112a9576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b60608151600014156112ee57505060408051602081019091526000815290565b6000604051806060016040528060408152602001611cc0604091399050600060038451600261131d9190611bc5565b6113279190611bdd565b611332906004611bfd565b90506000611341826020611bc5565b67ffffffffffffffff81111561136757634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611391576020820181803683370190505b509050818152600183018586518101602084015b818310156113fd576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f81168501518253506001016113a5565b600389510660018114611417576002811461142857611434565b613d3d60f01b600119830152611434565b603d60f81b6000198301525b509398975050505050505050565b6104fb83838360016000546001600160a01b03851661147357604051622e076360e81b815260040160405180910390fd5b836114915760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561154357506001600160a01b0387163b15155b156115cc575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461159460008884806001019550886111d7565b6115b1576040516368d2bf6b60e11b815260040160405180910390fd5b808214156115495782600054146115c757600080fd5b611612565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156115cd575b5060005561102a565b82805461162790611c48565b90600052602060002090601f016020900481019282611649576000855561168f565b82601f1061166257805160ff191683800117855561168f565b8280016001018555821561168f579182015b8281111561168f578251825591602001919060010190611674565b5061169b92915061169f565b5090565b5b8082111561169b57600081556001016116a0565b600067ffffffffffffffff808411156116cf576116cf611c93565b604051601f8501601f19908116603f011681019082821181831017156116f7576116f7611c93565b8160405280935085815286868601111561171057600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461174157600080fd5b919050565b600082601f830112611756578081fd5b611765838335602085016116b4565b9392505050565b60006020828403121561177d578081fd5b6117658261172a565b60008060408385031215611798578081fd5b6117a18361172a565b91506117af6020840161172a565b90509250929050565b6000806000606084860312156117cc578081fd5b6117d58461172a565b92506117e36020850161172a565b9150604084013590509250925092565b60008060008060808587031215611808578081fd5b6118118561172a565b935061181f6020860161172a565b925060408501359150606085013567ffffffffffffffff811115611841578182fd5b8501601f81018713611851578182fd5b611860878235602084016116b4565b91505092959194509250565b6000806040838503121561187e578182fd5b6118878361172a565b91506020830135801515811461189b578182fd5b809150509250929050565b600080604083850312156118b8578182fd5b6118c18361172a565b946020939093013593505050565b6000602082840312156118e0578081fd5b813561176581611ca9565b6000602082840312156118fc578081fd5b815161176581611ca9565b6000806000806080858703121561191c578384fd5b843567ffffffffffffffff80821115611933578586fd5b61193f88838901611746565b95506020870135915080821115611954578485fd5b61196088838901611746565b94506040870135915080821115611975578384fd5b5061198287828801611746565b9250506119916060860161172a565b905092959194509250565b6000602082840312156119ad578081fd5b5035919050565b600080600080608085870312156119c9578384fd5b84359350602085013567ffffffffffffffff808211156119e7578485fd5b6119f388838901611746565b94506040870135915080821115611a08578384fd5b611a1488838901611746565b93506060870135915080821115611a29578283fd5b5061186087828801611746565b60008151808452611a4e816020860160208601611c1c565b601f01601f19169290920160200192915050565b7f7b226e616d65223a220000000000000000000000000000000000000000000000815260008451611a9a816009850160208901611c1c565b7f222c20226465736372697074696f6e223a2200000000000000000000000000006009918401918201528451611ad781601b840160208901611c1c565b7f222c2022696d616765223a202200000000000000000000000000000000000000601b92909101918201528351611b15816028840160208801611c1c565b61227d60f01b60289290910191820152602a0195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251611b6981601d850160208701611c1c565b91909101601d0192915050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611ba86080830184611a36565b9695505050505050565b6020815260006117656020830184611a36565b60008219821115611bd857611bd8611c7d565b500190565b600082611bf857634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611c1757611c17611c7d565b500290565b60005b83811015611c37578181015183820152602001611c1f565b838111156105ec5750506000910152565b600181811c90821680611c5c57607f821691505b60208210811415610c9157634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610d7657600080fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122052d59b8ce53c25e1240b28c2c2b3f47838e6d438879c74e418d85822c533aed764736f6c63430008040033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
