{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC721CWithBasicRoyalties",
  "sourceName": "contracts/examples/erc721c/ERC721CWithBasicRoyalties.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "royaltyReceiver_",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "royaltyFeeNumerator_",
          "type": "uint96"
        },
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "CreatorTokenBase__InvalidTransferValidatorContract",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CreatorTokenBase__SetTransferValidatorFirst",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ShouldNotMintToBurnAddress",
      "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": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint96",
          "name": "feeNumerator",
          "type": "uint96"
        }
      ],
      "name": "DefaultRoyaltySet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint96",
          "name": "feeNumerator",
          "type": "uint96"
        }
      ],
      "name": "TokenRoyaltySet",
      "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"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldValidator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newValidator",
          "type": "address"
        }
      ],
      "name": "TransferValidatorUpdated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_OPERATOR_WHITELIST_ID",
      "outputs": [
        {
          "internalType": "uint120",
          "name": "",
          "type": "uint120"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_TRANSFER_SECURITY_LEVEL",
      "outputs": [
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_TRANSFER_VALIDATOR",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPermittedContractReceivers",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getSecurityPolicy",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum TransferSecurityLevels",
              "name": "transferSecurityLevel",
              "type": "uint8"
            },
            {
              "internalType": "uint120",
              "name": "operatorWhitelistId",
              "type": "uint120"
            },
            {
              "internalType": "uint120",
              "name": "permittedContractReceiversId",
              "type": "uint120"
            }
          ],
          "internalType": "struct CollectionSecurityPolicy",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTransferValidator",
      "outputs": [
        {
          "internalType": "contract ICreatorTokenTransferValidator",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getWhitelistedOperators",
      "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": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "isContractReceiverPermitted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isOperatorWhitelisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "isTransferAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "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": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_salePrice",
          "type": "uint256"
        }
      ],
      "name": "royaltyInfo",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeMint",
      "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": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "feeNumerator",
          "type": "uint96"
        }
      ],
      "name": "setDefaultRoyalty",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "level",
          "type": "uint8"
        },
        {
          "internalType": "uint120",
          "name": "operatorWhitelistId",
          "type": "uint120"
        },
        {
          "internalType": "uint120",
          "name": "permittedContractReceiversAllowlistId",
          "type": "uint120"
        }
      ],
      "name": "setToCustomSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "validator",
          "type": "address"
        },
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "level",
          "type": "uint8"
        },
        {
          "internalType": "uint120",
          "name": "operatorWhitelistId",
          "type": "uint120"
        },
        {
          "internalType": "uint120",
          "name": "permittedContractReceiversAllowlistId",
          "type": "uint120"
        }
      ],
      "name": "setToCustomValidatorAndSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setToDefaultSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "feeNumerator",
          "type": "uint96"
        }
      ],
      "name": "setTokenRoyalty",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "transferValidator_",
          "type": "address"
        }
      ],
      "name": "setTransferValidator",
      "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": [
        {
          "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"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b50604051620034d4380380620034d483398101604081905262000034916200041d565b838383836040518060200160405280600081525060405180602001604052806000815250816000908051906020019062000070929190620002aa565b50805162000086906001906020840190620002aa565b5050506200009b8282620000c160201b60201c565b50620000a9905033620000f1565b620000b5828262000143565b50505050505062000505565b8151620000d6906006906020850190620002aa565b508051620000ec906007906020840190620002aa565b505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200015a8282620001a560201b620016951760201c565b6040516001600160601b03821681526001600160a01b038316907f8a8bae378cb731c5c40b632330c6836c2f916f48edb967699c86736f9a6a76ef9060200160405180910390a25050565b6127106001600160601b0382161115620002195760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620002715760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640162000210565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600a55565b828054620002b890620004c8565b90600052602060002090601f016020900481019282620002dc576000855562000327565b82601f10620002f757805160ff191683800117855562000327565b8280016001018555821562000327579182015b82811115620003275782518255916020019190600101906200030a565b506200033592915062000339565b5090565b5b808211156200033557600081556001016200033a565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200037857600080fd5b81516001600160401b038082111562000395576200039562000350565b604051601f8301601f19908116603f01168101908282118183101715620003c057620003c062000350565b81604052838152602092508683858801011115620003dd57600080fd5b600091505b83821015620004015785820183015181830184015290820190620003e2565b83821115620004135760008385830101525b9695505050505050565b600080600080608085870312156200043457600080fd5b84516001600160a01b03811681146200044c57600080fd5b60208601519094506001600160601b03811681146200046a57600080fd5b60408601519093506001600160401b03808211156200048857600080fd5b620004968883890162000366565b93506060870151915080821115620004ad57600080fd5b50620004bc8782880162000366565b91505092959194509250565b600181811c90821680620004dd57607f821691505b60208210811415620004ff57634e487b7160e01b600052602260045260246000fd5b50919050565b612fbf80620005156000396000f3fe608060405234801561001057600080fd5b506004361061025c5760003560e01c80636134716211610145578063a22cb465116100bd578063c87b56dd1161008c578063e985e9c511610071578063e985e9c514610523578063f2fde38b1461055f578063fd762d921461057257600080fd5b8063c87b56dd14610508578063d007af5c1461051b57600080fd5b8063a22cb465146104ba578063a9fc664e146104cd578063b88d4fde146104e0578063be537f43146104f357600080fd5b8063715018a61161011457806395d89b41116100f957806395d89b411461048c5780639d645a4414610494578063a1448194146104a757600080fd5b8063715018a6146104735780638da5cb5b1461047b57600080fd5b806361347162146104245780636352211e146104375780636c3b86991461044a57806370a082311461045257600080fd5b806323b872dd116101d857806342842e0e116101a7578063495c8bf91161018c578063495c8bf9146103d45780635944c753146103e95780635d4c1d46146103fc57600080fd5b806342842e0e146103ae57806342966c68146103c157600080fd5b806323b872dd146103435780632a55205a146103565780632e8da8291461038857806340c10f191461039b57600080fd5b8063081812fc1161022f578063098144d411610214578063098144d41461030a5780631b25b0771461031b5780631c33b3281461032e57600080fd5b8063081812fc146102e4578063095ea7b3146102f757600080fd5b8063014635461461026157806301ffc9a71461029757806304634d8d146102ba57806306fdde03146102cf575b600080fd5b61027a71721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b6102aa6102a53660046127b1565b610585565b604051901515815260200161028e565b6102cd6102c8366004612804565b610596565b005b6102d76105ac565b60405161028e9190612891565b61027a6102f23660046128a4565b61063e565b6102cd6103053660046128bd565b610665565b6009546001600160a01b031661027a565b6102aa6103293660046128e9565b6107ba565b610336600181565b60405161028e9190612956565b6102cd610351366004612964565b610853565b6103696103643660046129a5565b6108da565b604080516001600160a01b03909316835260208301919091520161028e565b6102aa6103963660046129c7565b610995565b6102cd6103a93660046128bd565b610ac7565b6102cd6103bc366004612964565b610ad1565b6102cd6103cf3660046128a4565b610aec565b6103dc610af8565b60405161028e91906129e4565b6102cd6103f7366004612a31565b610c2f565b610404600181565b6040516effffffffffffffffffffffffffffff909116815260200161028e565b6102cd610432366004612a99565b610c42565b61027a6104453660046128a4565b610de7565b6102cd610e4c565b6104656104603660046129c7565b610f44565b60405190815260200161028e565b6102cd610fde565b6008546001600160a01b031661027a565b6102d7610ff2565b6102aa6104a23660046129c7565b611001565b6102cd6104b53660046128bd565b6110e0565b6102cd6104c8366004612ae7565b6110ea565b6102cd6104db3660046129c7565b6110f5565b6102cd6104ee366004612b67565b61124f565b6104fb6112d7565b60405161028e9190612c2b565b6102d76105163660046128a4565b6113a1565b6103dc611414565b6102aa610531366004612c6f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6102cd61056d3660046129c7565b6114e4565b6102cd610580366004612c9d565b611571565b6000610590826117af565b92915050565b61059e6117ed565b6105a882826117f5565b5050565b6060600680546105bb90612cf9565b80601f01602080910402602001604051908101604052809291908181526020018280546105e790612cf9565b80156106345780601f1061060957610100808354040283529160200191610634565b820191906000526020600020905b81548152906001019060200180831161061757829003601f168201915b5050505050905090565b60006106498261184f565b506000908152600460205260409020546001600160a01b031690565b600061067082610de7565b9050806001600160a01b0316836001600160a01b031614156106ff5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b038216148061073957506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b6107ab5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016106f6565b6107b583836118b3565b505050565b6009546000906001600160a01b0316156108485760095460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301529091169063285fb8c89060640160006040518083038186803b15801561082357600080fd5b505afa925050508015610834575060015b6108405750600061084c565b50600161084c565b5060015b9392505050565b61085d338261192e565b6108cf5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016106f6565b6107b58383836119ad565b6000828152600b602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046bffffffffffffffffffffffff16928201929092528291610959575060408051808201909152600a546001600160a01b0381168252600160a01b90046bffffffffffffffffffffffff1660208201525b60208101516000906127109061097d906bffffffffffffffffffffffff1687612d4a565b6109879190612d69565b915196919550909350505050565b6009546000906001600160a01b031615610abf57600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063d72dde5e90829063b95545529060240160606040518083038186803b1580156109f457600080fd5b505afa158015610a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2c9190612d8b565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044015b60206040518083038186803b158015610a8757600080fd5b505afa158015610a9b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105909190612dfd565b506000919050565b6105a88282611bc8565b6107b58383836040518060200160405280600081525061124f565b610af581611d78565b50565b6009546060906001600160a01b031615610c1c57600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690633fe5df9990829063b95545529060240160606040518083038186803b158015610b5757600080fd5b505afa158015610b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8f9190612d8b565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024015b60006040518083038186803b158015610bdb57600080fd5b505afa158015610bef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c179190810190612e1a565b905090565b5060408051600081526020810190915290565b610c376117ed565b6107b5838383611e32565b610c4a6117ed565b6000610c5e6009546001600160a01b031690565b90506001600160a01b038116610ca0576040517f39ffc7ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c090610cce9030908890600401612ecc565b600060405180830381600087803b158015610ce857600080fd5b505af1158015610cfc573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff861660248201526001600160a01b0384169250632304aa029150604401600060405180830381600087803b158015610d5857600080fd5b505af1158015610d6c573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0384169250638d74431491506044015b600060405180830381600087803b158015610dc957600080fd5b505af1158015610ddd573d6000803e3d6000fd5b5050505050505050565b6000818152600260205260408120546001600160a01b0316806105905760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016106f6565b610e546117ed565b610e6f71721c310194ccfc01e523fc93c9cccfa2a0ac6110f5565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c090610ea7903090600190600401612ecc565b600060405180830381600087803b158015610ec157600080fd5b505af1158015610ed5573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526001602482015271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150604401600060405180830381600087803b158015610f2a57600080fd5b505af1158015610f3e573d6000803e3d6000fd5b50505050565b60006001600160a01b038216610fc25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e6572000000000000000000000000000000000000000000000060648201526084016106f6565b506001600160a01b031660009081526003602052604090205490565b610fe6611e91565b610ff06000611eeb565b565b6060600780546105bb90612cf9565b6009546000906001600160a01b031615610abf57600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690639445f53090829063b95545529060240160606040518083038186803b15801561106057600080fd5b505afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190612d8b565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b0385166024820152604401610a6f565b6105a88282611f4a565b6105a8338383611f64565b6110fd6117ed565b60006001600160a01b0382163b1561118b576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b15801561114f57600080fd5b505afa92505050801561117f575060408051601f3d908101601f1916820190925261117c91810190612dfd565b60015b6111885761118b565b90505b6001600160a01b038216158015906111a1575080155b156111d8576040517f32483afb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600954604080516001600160a01b03928316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a1506009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b611259338361192e565b6112cb5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016106f6565b610f3e8484848461202b565b60408051606081018252600080825260208201819052918101919091526009546001600160a01b03161561138057600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063b95545529060240160606040518083038186803b15801561134857600080fd5b505afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c179190612d8b565b50604080516060810182526000808252602082018190529181019190915290565b60606113ac8261184f565b60006113c360408051602081019091526000815290565b905060008151116113e3576040518060200160405280600081525061084c565b806113ed846120b4565b6040516020016113fe929190612ee9565b6040516020818303038152906040529392505050565b6009546060906001600160a01b031615610c1c57600954604051635caaa2a960e11b81523060048201526001600160a01b03909116906317e94a6c90829063b95545529060240160606040518083038186803b15801561147357600080fd5b505afa158015611487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ab9190612d8b565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff9091166004820152602401610bc3565b6114ec611e91565b6001600160a01b0381166115685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106f6565b610af581611eeb565b6115796117ed565b611582846110f5565b604051630368065360e61b81526001600160a01b0385169063da0194c0906115b09030908790600401612ecc565b600060405180830381600087803b1580156115ca57600080fd5b505af11580156115de573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0387169250632304aa029150604401600060405180830381600087803b15801561163a57600080fd5b505af115801561164e573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff841660248201526001600160a01b0387169250638d7443149150604401610daf565b6127106bffffffffffffffffffffffff8216111561171b5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c6550726963650000000000000000000000000000000000000000000060648201526084016106f6565b6001600160a01b0382166117715760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016106f6565b604080518082019091526001600160a01b039092168083526bffffffffffffffffffffffff9091166020909201829052600160a01b90910217600a55565b60006001600160e01b031982167f2a55205a00000000000000000000000000000000000000000000000000000000148061059057506105908261215e565b610ff0611e91565b6117ff8282611695565b6040516bffffffffffffffffffffffff821681526001600160a01b038316907f8a8bae378cb731c5c40b632330c6836c2f916f48edb967699c86736f9a6a76ef9060200160405180910390a25050565b6000818152600260205260409020546001600160a01b0316610af55760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016106f6565b6000818152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915581906118f582610de7565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061193a83610de7565b9050806001600160a01b0316846001600160a01b0316148061198157506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806119a55750836001600160a01b031661199a8461063e565b6001600160a01b0316145b949350505050565b826001600160a01b03166119c082610de7565b6001600160a01b031614611a245760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016106f6565b6001600160a01b038216611a9f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106f6565b611aac838383600161219c565b826001600160a01b0316611abf82610de7565b6001600160a01b031614611b235760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016106f6565b6000818152600460209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a46107b583838360016121ca565b6001600160a01b038216611c1e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106f6565b6000818152600260205260409020546001600160a01b031615611c835760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106f6565b611c9160008383600161219c565b6000818152600260205260409020546001600160a01b031615611cf65760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106f6565b6001600160a01b0382166000818152600360209081526040808320805460010190558483526002909152808220805473ffffffffffffffffffffffffffffffffffffffff19168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46105a86000838360016121ca565b6000611d8382610de7565b9050611d9381600084600161219c565b611d9c82610de7565b6000838152600460209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a46105a88160008460016121ca565b611e3d8383836121f1565b6040516bffffffffffffffffffffffff821681526001600160a01b0383169084907f7f5b076c952c0ec86e5425963c1326dd0f03a3595c19f81d765e8ff559a6e33c906020015b60405180910390a3505050565b6008546001600160a01b03163314610ff05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106f6565b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6105a882826040518060200160405280600081525061231c565b816001600160a01b0316836001600160a01b03161415611fc65760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106f6565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101611e84565b6120368484846119ad565b612042848484846123a5565b610f3e5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106f6565b606060006120c183612508565b600101905060008167ffffffffffffffff8111156120e1576120e1612b20565b6040519080825280601f01601f19166020018201604052801561210b576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461215157612156565b612115565b509392505050565b60006001600160e01b031982167f86455d280000000000000000000000000000000000000000000000000000000014806105905750610590826125ea565b60005b818110156121c3576121bb85856121b68487612f18565b61266c565b60010161219f565b5050505050565b60005b818110156121c3576121e985856121e48487612f18565b6126c8565b6001016121cd565b6127106bffffffffffffffffffffffff821611156122775760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c6550726963650000000000000000000000000000000000000000000060648201526084016106f6565b6001600160a01b0382166122cd5760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d6574657273000000000060448201526064016106f6565b6040805180820182526001600160a01b0393841681526bffffffffffffffffffffffff92831660208083019182526000968752600b90529190942093519051909116600160a01b029116179055565b6123268383611bc8565b61233360008484846123a5565b6107b55760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106f6565b60006001600160a01b0384163b156124fd57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906123e9903390899088908890600401612f30565b602060405180830381600087803b15801561240357600080fd5b505af1925050508015612433575060408051601f3d908101601f1916820190925261243091810190612f6c565b60015b6124e3573d808015612461576040519150601f19603f3d011682016040523d82523d6000602084013e612466565b606091505b5080516124db5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106f6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506119a5565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612551577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061257d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061259b57662386f26fc10000830492506010015b6305f5e10083106125b3576305f5e100830492506008015b61271083106125c757612710830492506004015b606483106125d9576064830492506002015b600a83106105905760010192915050565b60006001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061264d57506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061059057506301ffc9a760e01b6001600160e01b0319831614610590565b6001600160a01b0383811615908316158180156126865750805b156126a457604051635cbd944160e01b815260040160405180910390fd5b81156126b0575b6121c3565b80156126bb576126ab565b6121c33386868634612716565b6001600160a01b0383811615908316158180156126e25750805b1561270057604051635cbd944160e01b815260040160405180910390fd5b811561270b576126ab565b80156126ab576126ab565b6009546001600160a01b0316156121c35760095460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301529091169063285fb8c89060640160006040518083038186803b15801561277c57600080fd5b505afa158015612790573d6000803e3d6000fd5b505050505050505050565b6001600160e01b031981168114610af557600080fd5b6000602082840312156127c357600080fd5b813561084c8161279b565b6001600160a01b0381168114610af557600080fd5b80356bffffffffffffffffffffffff811681146127ff57600080fd5b919050565b6000806040838503121561281757600080fd5b8235612822816127ce565b9150612830602084016127e3565b90509250929050565b60005b8381101561285457818101518382015260200161283c565b83811115610f3e5750506000910152565b6000815180845261287d816020860160208601612839565b601f01601f19169290920160200192915050565b60208152600061084c6020830184612865565b6000602082840312156128b657600080fd5b5035919050565b600080604083850312156128d057600080fd5b82356128db816127ce565b946020939093013593505050565b6000806000606084860312156128fe57600080fd5b8335612909816127ce565b92506020840135612919816127ce565b91506040840135612929816127ce565b809150509250925092565b6007811061295257634e487b7160e01b600052602160045260246000fd5b9052565b602081016105908284612934565b60008060006060848603121561297957600080fd5b8335612984816127ce565b92506020840135612994816127ce565b929592945050506040919091013590565b600080604083850312156129b857600080fd5b50508035926020909101359150565b6000602082840312156129d957600080fd5b813561084c816127ce565b6020808252825182820181905260009190848201906040850190845b81811015612a255783516001600160a01b031683529284019291840191600101612a00565b50909695505050505050565b600080600060608486031215612a4657600080fd5b833592506020840135612a58816127ce565b9150612a66604085016127e3565b90509250925092565b60078110610af557600080fd5b6effffffffffffffffffffffffffffff81168114610af557600080fd5b600080600060608486031215612aae57600080fd5b8335612ab981612a6f565b92506020840135612ac981612a7c565b9150604084013561292981612a7c565b8015158114610af557600080fd5b60008060408385031215612afa57600080fd5b8235612b05816127ce565b91506020830135612b1581612ad9565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612b5f57612b5f612b20565b604052919050565b60008060008060808587031215612b7d57600080fd5b8435612b88816127ce565b9350602085810135612b99816127ce565b935060408601359250606086013567ffffffffffffffff80821115612bbd57600080fd5b818801915088601f830112612bd157600080fd5b813581811115612be357612be3612b20565b612bf5601f8201601f19168501612b36565b91508082528984828501011115612c0b57600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000606082019050612c3e828451612934565b60208301516effffffffffffffffffffffffffffff8082166020850152806040860151166040850152505092915050565b60008060408385031215612c8257600080fd5b8235612c8d816127ce565b91506020830135612b15816127ce565b60008060008060808587031215612cb357600080fd5b8435612cbe816127ce565b93506020850135612cce81612a6f565b92506040850135612cde81612a7c565b91506060850135612cee81612a7c565b939692955090935050565b600181811c90821680612d0d57607f821691505b60208210811415612d2e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612d6457612d64612d34565b500290565b600082612d8657634e487b7160e01b600052601260045260246000fd5b500490565b600060608284031215612d9d57600080fd5b6040516060810181811067ffffffffffffffff82111715612dc057612dc0612b20565b6040528251612dce81612a6f565b81526020830151612dde81612a7c565b60208201526040830151612df181612a7c565b60408201529392505050565b600060208284031215612e0f57600080fd5b815161084c81612ad9565b60006020808385031215612e2d57600080fd5b825167ffffffffffffffff80821115612e4557600080fd5b818501915085601f830112612e5957600080fd5b815181811115612e6b57612e6b612b20565b8060051b9150612e7c848301612b36565b8181529183018401918481019088841115612e9657600080fd5b938501935b83851015612ec05784519250612eb0836127ce565b8282529385019390850190612e9b565b98975050505050505050565b6001600160a01b03831681526040810161084c6020830184612934565b60008351612efb818460208801612839565b835190830190612f0f818360208801612839565b01949350505050565b60008219821115612f2b57612f2b612d34565b500190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612f626080830184612865565b9695505050505050565b600060208284031215612f7e57600080fd5b815161084c8161279b56fea264697066735822122040ca97344d8c850d7de425d7032b83a1140ee6258f651116a48fd250b06d78e664736f6c63430008090033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061025c5760003560e01c80636134716211610145578063a22cb465116100bd578063c87b56dd1161008c578063e985e9c511610071578063e985e9c514610523578063f2fde38b1461055f578063fd762d921461057257600080fd5b8063c87b56dd14610508578063d007af5c1461051b57600080fd5b8063a22cb465146104ba578063a9fc664e146104cd578063b88d4fde146104e0578063be537f43146104f357600080fd5b8063715018a61161011457806395d89b41116100f957806395d89b411461048c5780639d645a4414610494578063a1448194146104a757600080fd5b8063715018a6146104735780638da5cb5b1461047b57600080fd5b806361347162146104245780636352211e146104375780636c3b86991461044a57806370a082311461045257600080fd5b806323b872dd116101d857806342842e0e116101a7578063495c8bf91161018c578063495c8bf9146103d45780635944c753146103e95780635d4c1d46146103fc57600080fd5b806342842e0e146103ae57806342966c68146103c157600080fd5b806323b872dd146103435780632a55205a146103565780632e8da8291461038857806340c10f191461039b57600080fd5b8063081812fc1161022f578063098144d411610214578063098144d41461030a5780631b25b0771461031b5780631c33b3281461032e57600080fd5b8063081812fc146102e4578063095ea7b3146102f757600080fd5b8063014635461461026157806301ffc9a71461029757806304634d8d146102ba57806306fdde03146102cf575b600080fd5b61027a71721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b6102aa6102a53660046127b1565b610585565b604051901515815260200161028e565b6102cd6102c8366004612804565b610596565b005b6102d76105ac565b60405161028e9190612891565b61027a6102f23660046128a4565b61063e565b6102cd6103053660046128bd565b610665565b6009546001600160a01b031661027a565b6102aa6103293660046128e9565b6107ba565b610336600181565b60405161028e9190612956565b6102cd610351366004612964565b610853565b6103696103643660046129a5565b6108da565b604080516001600160a01b03909316835260208301919091520161028e565b6102aa6103963660046129c7565b610995565b6102cd6103a93660046128bd565b610ac7565b6102cd6103bc366004612964565b610ad1565b6102cd6103cf3660046128a4565b610aec565b6103dc610af8565b60405161028e91906129e4565b6102cd6103f7366004612a31565b610c2f565b610404600181565b6040516effffffffffffffffffffffffffffff909116815260200161028e565b6102cd610432366004612a99565b610c42565b61027a6104453660046128a4565b610de7565b6102cd610e4c565b6104656104603660046129c7565b610f44565b60405190815260200161028e565b6102cd610fde565b6008546001600160a01b031661027a565b6102d7610ff2565b6102aa6104a23660046129c7565b611001565b6102cd6104b53660046128bd565b6110e0565b6102cd6104c8366004612ae7565b6110ea565b6102cd6104db3660046129c7565b6110f5565b6102cd6104ee366004612b67565b61124f565b6104fb6112d7565b60405161028e9190612c2b565b6102d76105163660046128a4565b6113a1565b6103dc611414565b6102aa610531366004612c6f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6102cd61056d3660046129c7565b6114e4565b6102cd610580366004612c9d565b611571565b6000610590826117af565b92915050565b61059e6117ed565b6105a882826117f5565b5050565b6060600680546105bb90612cf9565b80601f01602080910402602001604051908101604052809291908181526020018280546105e790612cf9565b80156106345780601f1061060957610100808354040283529160200191610634565b820191906000526020600020905b81548152906001019060200180831161061757829003601f168201915b5050505050905090565b60006106498261184f565b506000908152600460205260409020546001600160a01b031690565b600061067082610de7565b9050806001600160a01b0316836001600160a01b031614156106ff5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b038216148061073957506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b6107ab5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016106f6565b6107b583836118b3565b505050565b6009546000906001600160a01b0316156108485760095460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301529091169063285fb8c89060640160006040518083038186803b15801561082357600080fd5b505afa925050508015610834575060015b6108405750600061084c565b50600161084c565b5060015b9392505050565b61085d338261192e565b6108cf5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016106f6565b6107b58383836119ad565b6000828152600b602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046bffffffffffffffffffffffff16928201929092528291610959575060408051808201909152600a546001600160a01b0381168252600160a01b90046bffffffffffffffffffffffff1660208201525b60208101516000906127109061097d906bffffffffffffffffffffffff1687612d4a565b6109879190612d69565b915196919550909350505050565b6009546000906001600160a01b031615610abf57600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063d72dde5e90829063b95545529060240160606040518083038186803b1580156109f457600080fd5b505afa158015610a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2c9190612d8b565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044015b60206040518083038186803b158015610a8757600080fd5b505afa158015610a9b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105909190612dfd565b506000919050565b6105a88282611bc8565b6107b58383836040518060200160405280600081525061124f565b610af581611d78565b50565b6009546060906001600160a01b031615610c1c57600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690633fe5df9990829063b95545529060240160606040518083038186803b158015610b5757600080fd5b505afa158015610b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8f9190612d8b565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024015b60006040518083038186803b158015610bdb57600080fd5b505afa158015610bef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c179190810190612e1a565b905090565b5060408051600081526020810190915290565b610c376117ed565b6107b5838383611e32565b610c4a6117ed565b6000610c5e6009546001600160a01b031690565b90506001600160a01b038116610ca0576040517f39ffc7ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c090610cce9030908890600401612ecc565b600060405180830381600087803b158015610ce857600080fd5b505af1158015610cfc573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff861660248201526001600160a01b0384169250632304aa029150604401600060405180830381600087803b158015610d5857600080fd5b505af1158015610d6c573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0384169250638d74431491506044015b600060405180830381600087803b158015610dc957600080fd5b505af1158015610ddd573d6000803e3d6000fd5b5050505050505050565b6000818152600260205260408120546001600160a01b0316806105905760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016106f6565b610e546117ed565b610e6f71721c310194ccfc01e523fc93c9cccfa2a0ac6110f5565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c090610ea7903090600190600401612ecc565b600060405180830381600087803b158015610ec157600080fd5b505af1158015610ed5573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526001602482015271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150604401600060405180830381600087803b158015610f2a57600080fd5b505af1158015610f3e573d6000803e3d6000fd5b50505050565b60006001600160a01b038216610fc25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e6572000000000000000000000000000000000000000000000060648201526084016106f6565b506001600160a01b031660009081526003602052604090205490565b610fe6611e91565b610ff06000611eeb565b565b6060600780546105bb90612cf9565b6009546000906001600160a01b031615610abf57600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690639445f53090829063b95545529060240160606040518083038186803b15801561106057600080fd5b505afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110989190612d8b565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b0385166024820152604401610a6f565b6105a88282611f4a565b6105a8338383611f64565b6110fd6117ed565b60006001600160a01b0382163b1561118b576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b15801561114f57600080fd5b505afa92505050801561117f575060408051601f3d908101601f1916820190925261117c91810190612dfd565b60015b6111885761118b565b90505b6001600160a01b038216158015906111a1575080155b156111d8576040517f32483afb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600954604080516001600160a01b03928316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a1506009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b611259338361192e565b6112cb5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016106f6565b610f3e8484848461202b565b60408051606081018252600080825260208201819052918101919091526009546001600160a01b03161561138057600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063b95545529060240160606040518083038186803b15801561134857600080fd5b505afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c179190612d8b565b50604080516060810182526000808252602082018190529181019190915290565b60606113ac8261184f565b60006113c360408051602081019091526000815290565b905060008151116113e3576040518060200160405280600081525061084c565b806113ed846120b4565b6040516020016113fe929190612ee9565b6040516020818303038152906040529392505050565b6009546060906001600160a01b031615610c1c57600954604051635caaa2a960e11b81523060048201526001600160a01b03909116906317e94a6c90829063b95545529060240160606040518083038186803b15801561147357600080fd5b505afa158015611487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ab9190612d8b565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff9091166004820152602401610bc3565b6114ec611e91565b6001600160a01b0381166115685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106f6565b610af581611eeb565b6115796117ed565b611582846110f5565b604051630368065360e61b81526001600160a01b0385169063da0194c0906115b09030908790600401612ecc565b600060405180830381600087803b1580156115ca57600080fd5b505af11580156115de573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0387169250632304aa029150604401600060405180830381600087803b15801561163a57600080fd5b505af115801561164e573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff841660248201526001600160a01b0387169250638d7443149150604401610daf565b6127106bffffffffffffffffffffffff8216111561171b5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c6550726963650000000000000000000000000000000000000000000060648201526084016106f6565b6001600160a01b0382166117715760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016106f6565b604080518082019091526001600160a01b039092168083526bffffffffffffffffffffffff9091166020909201829052600160a01b90910217600a55565b60006001600160e01b031982167f2a55205a00000000000000000000000000000000000000000000000000000000148061059057506105908261215e565b610ff0611e91565b6117ff8282611695565b6040516bffffffffffffffffffffffff821681526001600160a01b038316907f8a8bae378cb731c5c40b632330c6836c2f916f48edb967699c86736f9a6a76ef9060200160405180910390a25050565b6000818152600260205260409020546001600160a01b0316610af55760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016106f6565b6000818152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915581906118f582610de7565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061193a83610de7565b9050806001600160a01b0316846001600160a01b0316148061198157506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806119a55750836001600160a01b031661199a8461063e565b6001600160a01b0316145b949350505050565b826001600160a01b03166119c082610de7565b6001600160a01b031614611a245760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016106f6565b6001600160a01b038216611a9f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106f6565b611aac838383600161219c565b826001600160a01b0316611abf82610de7565b6001600160a01b031614611b235760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016106f6565b6000818152600460209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a46107b583838360016121ca565b6001600160a01b038216611c1e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106f6565b6000818152600260205260409020546001600160a01b031615611c835760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106f6565b611c9160008383600161219c565b6000818152600260205260409020546001600160a01b031615611cf65760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106f6565b6001600160a01b0382166000818152600360209081526040808320805460010190558483526002909152808220805473ffffffffffffffffffffffffffffffffffffffff19168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46105a86000838360016121ca565b6000611d8382610de7565b9050611d9381600084600161219c565b611d9c82610de7565b6000838152600460209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a46105a88160008460016121ca565b611e3d8383836121f1565b6040516bffffffffffffffffffffffff821681526001600160a01b0383169084907f7f5b076c952c0ec86e5425963c1326dd0f03a3595c19f81d765e8ff559a6e33c906020015b60405180910390a3505050565b6008546001600160a01b03163314610ff05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106f6565b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6105a882826040518060200160405280600081525061231c565b816001600160a01b0316836001600160a01b03161415611fc65760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106f6565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101611e84565b6120368484846119ad565b612042848484846123a5565b610f3e5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106f6565b606060006120c183612508565b600101905060008167ffffffffffffffff8111156120e1576120e1612b20565b6040519080825280601f01601f19166020018201604052801561210b576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461215157612156565b612115565b509392505050565b60006001600160e01b031982167f86455d280000000000000000000000000000000000000000000000000000000014806105905750610590826125ea565b60005b818110156121c3576121bb85856121b68487612f18565b61266c565b60010161219f565b5050505050565b60005b818110156121c3576121e985856121e48487612f18565b6126c8565b6001016121cd565b6127106bffffffffffffffffffffffff821611156122775760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c6550726963650000000000000000000000000000000000000000000060648201526084016106f6565b6001600160a01b0382166122cd5760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d6574657273000000000060448201526064016106f6565b6040805180820182526001600160a01b0393841681526bffffffffffffffffffffffff92831660208083019182526000968752600b90529190942093519051909116600160a01b029116179055565b6123268383611bc8565b61233360008484846123a5565b6107b55760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106f6565b60006001600160a01b0384163b156124fd57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906123e9903390899088908890600401612f30565b602060405180830381600087803b15801561240357600080fd5b505af1925050508015612433575060408051601f3d908101601f1916820190925261243091810190612f6c565b60015b6124e3573d808015612461576040519150601f19603f3d011682016040523d82523d6000602084013e612466565b606091505b5080516124db5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106f6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506119a5565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612551577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061257d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061259b57662386f26fc10000830492506010015b6305f5e10083106125b3576305f5e100830492506008015b61271083106125c757612710830492506004015b606483106125d9576064830492506002015b600a83106105905760010192915050565b60006001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061264d57506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061059057506301ffc9a760e01b6001600160e01b0319831614610590565b6001600160a01b0383811615908316158180156126865750805b156126a457604051635cbd944160e01b815260040160405180910390fd5b81156126b0575b6121c3565b80156126bb576126ab565b6121c33386868634612716565b6001600160a01b0383811615908316158180156126e25750805b1561270057604051635cbd944160e01b815260040160405180910390fd5b811561270b576126ab565b80156126ab576126ab565b6009546001600160a01b0316156121c35760095460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301529091169063285fb8c89060640160006040518083038186803b15801561277c57600080fd5b505afa158015612790573d6000803e3d6000fd5b505050505050505050565b6001600160e01b031981168114610af557600080fd5b6000602082840312156127c357600080fd5b813561084c8161279b565b6001600160a01b0381168114610af557600080fd5b80356bffffffffffffffffffffffff811681146127ff57600080fd5b919050565b6000806040838503121561281757600080fd5b8235612822816127ce565b9150612830602084016127e3565b90509250929050565b60005b8381101561285457818101518382015260200161283c565b83811115610f3e5750506000910152565b6000815180845261287d816020860160208601612839565b601f01601f19169290920160200192915050565b60208152600061084c6020830184612865565b6000602082840312156128b657600080fd5b5035919050565b600080604083850312156128d057600080fd5b82356128db816127ce565b946020939093013593505050565b6000806000606084860312156128fe57600080fd5b8335612909816127ce565b92506020840135612919816127ce565b91506040840135612929816127ce565b809150509250925092565b6007811061295257634e487b7160e01b600052602160045260246000fd5b9052565b602081016105908284612934565b60008060006060848603121561297957600080fd5b8335612984816127ce565b92506020840135612994816127ce565b929592945050506040919091013590565b600080604083850312156129b857600080fd5b50508035926020909101359150565b6000602082840312156129d957600080fd5b813561084c816127ce565b6020808252825182820181905260009190848201906040850190845b81811015612a255783516001600160a01b031683529284019291840191600101612a00565b50909695505050505050565b600080600060608486031215612a4657600080fd5b833592506020840135612a58816127ce565b9150612a66604085016127e3565b90509250925092565b60078110610af557600080fd5b6effffffffffffffffffffffffffffff81168114610af557600080fd5b600080600060608486031215612aae57600080fd5b8335612ab981612a6f565b92506020840135612ac981612a7c565b9150604084013561292981612a7c565b8015158114610af557600080fd5b60008060408385031215612afa57600080fd5b8235612b05816127ce565b91506020830135612b1581612ad9565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612b5f57612b5f612b20565b604052919050565b60008060008060808587031215612b7d57600080fd5b8435612b88816127ce565b9350602085810135612b99816127ce565b935060408601359250606086013567ffffffffffffffff80821115612bbd57600080fd5b818801915088601f830112612bd157600080fd5b813581811115612be357612be3612b20565b612bf5601f8201601f19168501612b36565b91508082528984828501011115612c0b57600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000606082019050612c3e828451612934565b60208301516effffffffffffffffffffffffffffff8082166020850152806040860151166040850152505092915050565b60008060408385031215612c8257600080fd5b8235612c8d816127ce565b91506020830135612b15816127ce565b60008060008060808587031215612cb357600080fd5b8435612cbe816127ce565b93506020850135612cce81612a6f565b92506040850135612cde81612a7c565b91506060850135612cee81612a7c565b939692955090935050565b600181811c90821680612d0d57607f821691505b60208210811415612d2e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612d6457612d64612d34565b500290565b600082612d8657634e487b7160e01b600052601260045260246000fd5b500490565b600060608284031215612d9d57600080fd5b6040516060810181811067ffffffffffffffff82111715612dc057612dc0612b20565b6040528251612dce81612a6f565b81526020830151612dde81612a7c565b60208201526040830151612df181612a7c565b60408201529392505050565b600060208284031215612e0f57600080fd5b815161084c81612ad9565b60006020808385031215612e2d57600080fd5b825167ffffffffffffffff80821115612e4557600080fd5b818501915085601f830112612e5957600080fd5b815181811115612e6b57612e6b612b20565b8060051b9150612e7c848301612b36565b8181529183018401918481019088841115612e9657600080fd5b938501935b83851015612ec05784519250612eb0836127ce565b8282529385019390850190612e9b565b98975050505050505050565b6001600160a01b03831681526040810161084c6020830184612934565b60008351612efb818460208801612839565b835190830190612f0f818360208801612839565b01949350505050565b60008219821115612f2b57612f2b612d34565b500190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612f626080830184612865565b9695505050505050565b600060208284031215612f7e57600080fd5b815161084c8161279b56fea264697066735822122040ca97344d8c850d7de425d7032b83a1140ee6258f651116a48fd250b06d78e664736f6c63430008090033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
