{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC721ACWithImmutableMinterRoyalties",
  "sourceName": "contracts/examples/erc721ac/ERC721ACWithImmutableMinterRoyalties.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "royaltyFeeNumerator_",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "ApprovalCallerNotOwnerNorApproved",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ApprovalQueryForNonexistentToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BalanceQueryForZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CreatorTokenBase__InvalidTransferValidatorContract",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CreatorTokenBase__SetTransferValidatorFirst",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ImmutableMinterRoyalties__MinterCannotBeZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ImmutableMinterRoyalties__MinterHasAlreadyBeenAssignedToTokenId",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ImmutableMinterRoyalties__RoyaltyFeeWillExceedSalePrice",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MintERC2309QuantityExceedsLimit",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MintToZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MintZeroQuantity",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OwnerQueryForNonexistentToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OwnershipNotInitializedForExtraData",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ShouldNotMintToBurnAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferCallerNotOwnerNorApproved",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferFromIncorrectOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferToNonERC721ReceiverImplementer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferToZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "URIQueryForNonexistentToken",
      "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": "uint256",
          "name": "fromTokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "toTokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "ConsecutiveTransfer",
      "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"
    },
    {
      "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": [],
      "name": "FEE_DENOMINATOR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "payable",
      "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": "quantity",
          "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": [],
      "name": "royaltyFeeNumerator",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "salePrice",
          "type": "uint256"
        }
      ],
      "name": "royaltyInfo",
      "outputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "royaltyAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "quantity",
          "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": "payable",
      "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": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "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": "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": [],
      "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": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523480156200001157600080fd5b5060405162002caf38038062002caf833981016040819052620000349162000283565b828282818181600290805190602001906200005192919062000110565b5080516200006790600390602084019062000110565b50506001600055506200007a3362000095565b5062000088905081620000e7565b6080525062000334915050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6127108111156200010b57604051634ca36f5f60e11b815260040160405180910390fd5b600a55565b8280546200011e90620002f7565b90600052602060002090601f0160209004810192826200014257600085556200018d565b82601f106200015d57805160ff19168380011785556200018d565b828001600101855582156200018d579182015b828111156200018d57825182559160200191906001019062000170565b506200019b9291506200019f565b5090565b5b808211156200019b5760008155600101620001a0565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001de57600080fd5b81516001600160401b0380821115620001fb57620001fb620001b6565b604051601f8301601f19908116603f01168101908282118183101715620002265762000226620001b6565b816040528381526020925086838588010111156200024357600080fd5b600091505b8382101562000267578582018301518183018401529082019062000248565b83821115620002795760008385830101525b9695505050505050565b6000806000606084860312156200029957600080fd5b835160208501519093506001600160401b0380821115620002b957600080fd5b620002c787838801620001cc565b93506040860151915080821115620002de57600080fd5b50620002ed86828701620001cc565b9150509250925092565b600181811c908216806200030c57607f821691505b602082108114156200032e57634e487b7160e01b600052602260045260246000fd5b50919050565b60805161295862000357600039600081816105750152610bbe01526129586000f3fe60806040526004361061026a5760003560e01c80636352211e11610153578063a22cb465116100cb578063d007af5c1161007f578063e985e9c511610064578063e985e9c5146106cc578063f2fde38b14610715578063fd762d921461073557600080fd5b8063d007af5c146106a1578063d73792a9146106b657600080fd5b8063b88d4fde116100b0578063b88d4fde1461064c578063be537f431461065f578063c87b56dd1461068157600080fd5b8063a22cb4651461060c578063a9fc664e1461062c57600080fd5b806381ddcc1f1161012257806395d89b411161010757806395d89b41146105b75780639d645a44146105cc578063a1448194146105ec57600080fd5b806381ddcc1f146105665780638da5cb5b1461059957600080fd5b80636352211e146104fc5780636c3b86991461051c57806370a0823114610531578063715018a61461055157600080fd5b806323b872dd116101e657806342842e0e116101b5578063495c8bf91161019a578063495c8bf9146104855780635d4c1d46146104a757806361347162146104dc57600080fd5b806342842e0e1461045257806342966c681461046557600080fd5b806323b872dd146103c05780632a55205a146103d35780632e8da8291461041257806340c10f191461043257600080fd5b8063095ea7b31161023d57806318160ddd1161022257806318160ddd146103575780631b25b0771461037e5780631c33b3281461039e57600080fd5b8063095ea7b314610324578063098144d41461033957600080fd5b8063014635461461026f57806301ffc9a7146102b257806306fdde03146102e2578063081812fc14610304575b600080fd5b34801561027b57600080fd5b5061029571721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102be57600080fd5b506102d26102cd3660046121de565b610755565b60405190151581526020016102a9565b3480156102ee57600080fd5b506102f7610766565b6040516102a99190612253565b34801561031057600080fd5b5061029561031f366004612266565b6107f8565b610337610332366004612294565b610855565b005b34801561034557600080fd5b506009546001600160a01b0316610295565b34801561036357600080fd5b5060015460005403600019015b6040519081526020016102a9565b34801561038a57600080fd5b506102d26103993660046122c0565b61091b565b3480156103aa57600080fd5b506103b3600181565b6040516102a9919061232d565b6103376103ce36600461233b565b6109b4565b3480156103df57600080fd5b506103f36103ee36600461237c565b610b9c565b604080516001600160a01b0390931683526020830191909152016102a9565b34801561041e57600080fd5b506102d261042d36600461239e565b610bf8565b34801561043e57600080fd5b5061033761044d366004612294565b610d2a565b61033761046036600461233b565b610d38565b34801561047157600080fd5b50610337610480366004612266565b610d58565b34801561049157600080fd5b5061049a610d64565b6040516102a991906123bb565b3480156104b357600080fd5b506104bc600181565b6040516effffffffffffffffffffffffffffff90911681526020016102a9565b3480156104e857600080fd5b506103376104f7366004612432565b610e9b565b34801561050857600080fd5b50610295610517366004612266565b611040565b34801561052857600080fd5b5061033761104b565b34801561053d57600080fd5b5061037061054c36600461239e565b611143565b34801561055d57600080fd5b506103376111ab565b34801561057257600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610370565b3480156105a557600080fd5b506008546001600160a01b0316610295565b3480156105c357600080fd5b506102f76111bf565b3480156105d857600080fd5b506102d26105e736600461239e565b6111ce565b3480156105f857600080fd5b50610337610607366004612294565b6112ad565b34801561061857600080fd5b50610337610627366004612480565b6112b7565b34801561063857600080fd5b5061033761064736600461239e565b611330565b61033761065a366004612500565b61148a565b34801561066b57600080fd5b506106746114ce565b6040516102a991906125c4565b34801561068d57600080fd5b506102f761069c366004612266565b611598565b3480156106ad57600080fd5b5061049a611642565b3480156106c257600080fd5b5061037061271081565b3480156106d857600080fd5b506102d26106e7366004612608565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561072157600080fd5b5061033761073036600461239e565b611712565b34801561074157600080fd5b50610337610750366004612636565b6117a4565b6000610760826118c8565b92915050565b60606002805461077590612692565b80601f01602080910402602001604051908101604052809291908181526020018280546107a190612692565b80156107ee5780601f106107c3576101008083540402835291602001916107ee565b820191906000526020600020905b8154815290600101906020018083116107d157829003601f168201915b5050505050905090565b600061080382611916565b610839576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061086082611040565b9050336001600160a01b038216146108b25761087c81336106e7565b6108b2576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6009546000906001600160a01b0316156109a95760095460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301529091169063285fb8c89060640160006040518083038186803b15801561098457600080fd5b505afa925050508015610995575060015b6109a1575060006109ad565b5060016109ad565b5060015b9392505050565b60006109bf8261194b565b9050836001600160a01b0316816001600160a01b031614610a0c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090208054610a388187335b6001600160a01b039081169116811491141790565b610a6357610a4686336106e7565b610a6357604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610aa3576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ab086868660016119cd565b8015610abb57600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040902055600160e11b8316610b465760018401600081815260046020526040902054610b44576000548114610b445760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610b9486868660016119fb565b505050505050565b6000828152600b602052604081205481906001600160a01b0316612710610be37f0000000000000000000000000000000000000000000000000000000000000000866126e3565b610bed9190612702565b915091509250929050565b6009546000906001600160a01b031615610d2257600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063d72dde5e90829063b95545529060240160606040518083038186803b158015610c5757600080fd5b505afa158015610c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8f9190612724565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044015b60206040518083038186803b158015610cea57600080fd5b505afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190612796565b506000919050565b610d348282611a22565b5050565b610d538383836040518060200160405280600081525061148a565b505050565b610d6181611a56565b50565b6009546060906001600160a01b031615610e8857600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690633fe5df9990829063b95545529060240160606040518083038186803b158015610dc357600080fd5b505afa158015610dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfb9190612724565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024015b60006040518083038186803b158015610e4757600080fd5b505afa158015610e5b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e8391908101906127b3565b905090565b5060408051600081526020810190915290565b610ea3611a8a565b6000610eb76009546001600160a01b031690565b90506001600160a01b038116610ef9576040517f39ffc7ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c090610f279030908890600401612865565b600060405180830381600087803b158015610f4157600080fd5b505af1158015610f55573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff861660248201526001600160a01b0384169250632304aa029150604401600060405180830381600087803b158015610fb157600080fd5b505af1158015610fc5573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0384169250638d74431491506044015b600060405180830381600087803b15801561102257600080fd5b505af1158015611036573d6000803e3d6000fd5b5050505050505050565b60006107608261194b565b611053611a8a565b61106e71721c310194ccfc01e523fc93c9cccfa2a0ac611330565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c0906110a6903090600190600401612865565b600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526001602482015271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150604401600060405180830381600087803b15801561112957600080fd5b505af115801561113d573d6000803e3d6000fd5b50505050565b60006001600160a01b038216611185576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6111b3611a8e565b6111bd6000611ae8565b565b60606003805461077590612692565b6009546000906001600160a01b031615610d2257600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690639445f53090829063b95545529060240160606040518083038186803b15801561122d57600080fd5b505afa158015611241573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112659190612724565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b0385166024820152604401610cd2565b610d348282611b47565b3360008181526007602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611324911515815260200190565b60405180910390a35050565b611338611a8a565b60006001600160a01b0382163b156113c6576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b15801561138a57600080fd5b505afa9250505080156113ba575060408051601f3d908101601f191682019092526113b791810190612796565b60015b6113c3576113c6565b90505b6001600160a01b038216158015906113dc575080155b15611413576040517f32483afb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600954604080516001600160a01b03928316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a1506009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6114958484846109b4565b6001600160a01b0383163b1561113d576114b184848484611b61565b61113d576040516368d2bf6b60e11b815260040160405180910390fd5b60408051606081018252600080825260208201819052918101919091526009546001600160a01b03161561157757600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063b95545529060240160606040518083038186803b15801561153f57600080fd5b505afa158015611553573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190612724565b50604080516060810182526000808252602082018190529181019190915290565b60606115a382611916565b6115d9576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115f060408051602081019091526000815290565b905080516000141561161157604051806020016040528060008152506109ad565b8061161b84611c58565b60405160200161162c929190612882565b6040516020818303038152906040529392505050565b6009546060906001600160a01b031615610e8857600954604051635caaa2a960e11b81523060048201526001600160a01b03909116906317e94a6c90829063b95545529060240160606040518083038186803b1580156116a157600080fd5b505afa1580156116b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d99190612724565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff9091166004820152602401610e2f565b61171a611a8e565b6001600160a01b03811661179b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610d6181611ae8565b6117ac611a8a565b6117b584611330565b604051630368065360e61b81526001600160a01b0385169063da0194c0906117e39030908790600401612865565b600060405180830381600087803b1580156117fd57600080fd5b505af1158015611811573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0387169250632304aa029150604401600060405180830381600087803b15801561186d57600080fd5b505af1158015611881573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff841660248201526001600160a01b0387169250638d7443149150604401611008565b60006001600160e01b031982167f2a55205a00000000000000000000000000000000000000000000000000000000148061076057506301ffc9a760e01b6001600160e01b0319831614610760565b60008160011115801561192a575060005482105b8015610760575050600090815260046020526040902054600160e01b161590565b6000818060011161199b5760005481101561199b57600081815260046020526040902054600160e01b8116611999575b806109ad57506000190160008181526004602052604090205461197b565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156119f4576119ec85856119e784876128b1565b611ca6565b6001016119d0565b5050505050565b60005b818110156119f457611a1a8585611a1584876128b1565b611d02565b6001016119fe565b60008054905b82811015611a4b57611a4384611a3e83856128b1565b611d50565b600101611a28565b50610d538383611e1a565b611a5f81611f5a565b6000908152600b60205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055565b6111bd5b6008546001600160a01b031633146111bd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611792565b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610d34828260405180602001604052806000815250611f65565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611b969033908990889088906004016128c9565b602060405180830381600087803b158015611bb057600080fd5b505af1925050508015611be0575060408051601f3d908101601f19168201909252611bdd91810190612905565b60015b611c3b573d808015611c0e576040519150601f19603f3d011682016040523d82523d6000602084013e611c13565b606091505b508051611c33576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480611c8f57611c94565b611c72565b50819003601f19909101908152919050565b6001600160a01b038381161590831615818015611cc05750805b15611cde57604051635cbd944160e01b815260040160405180910390fd5b8115611cea575b6119f4565b8015611cf557611ce5565b6119f43386868634611fcb565b6001600160a01b038381161590831615818015611d1c5750805b15611d3a57604051635cbd944160e01b815260040160405180910390fd5b8115611d4557611ce5565b8015611ce557611ce5565b6001600160a01b038216611d90576040517fa921732400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600b60205260409020546001600160a01b031615611ddf576040517f3343309b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600b60205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60005481611e54576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e6160008483856119cd565b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b818114611f1057808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101611ed8565b5081611f48576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908155610d5391508483856119fb565b610d61816000612050565b611f6f8383611a22565b6001600160a01b0383163b15610d53576000548281035b611f996000868380600101945086611b61565b611fb6576040516368d2bf6b60e11b815260040160405180910390fd5b818110611f865781600054146119f457600080fd5b6009546001600160a01b0316156119f45760095460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301529091169063285fb8c89060640160006040518083038186803b15801561203157600080fd5b505afa158015612045573d6000803e3d6000fd5b505050505050505050565b600061205b8361194b565b90508060008061207986600090815260066020526040902080549091565b9150915084156120b95761208e818433610a23565b6120b95761209c83336106e7565b6120b957604051632ce44b5f60e11b815260040160405180910390fd5b6120c78360008860016119cd565b80156120d257600082555b6001600160a01b038316600081815260056020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b177c030000000000000000000000000000000000000000000000000000000017600087815260046020526040902055600160e11b841661217257600186016000818152600460205260409020546121705760005481146121705760008181526004602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a46121b88360008860016119fb565b5050600180548101905550505050565b6001600160e01b031981168114610d6157600080fd5b6000602082840312156121f057600080fd5b81356109ad816121c8565b60005b838110156122165781810151838201526020016121fe565b8381111561113d5750506000910152565b6000815180845261223f8160208601602086016121fb565b601f01601f19169290920160200192915050565b6020815260006109ad6020830184612227565b60006020828403121561227857600080fd5b5035919050565b6001600160a01b0381168114610d6157600080fd5b600080604083850312156122a757600080fd5b82356122b28161227f565b946020939093013593505050565b6000806000606084860312156122d557600080fd5b83356122e08161227f565b925060208401356122f08161227f565b915060408401356123008161227f565b809150509250925092565b6007811061232957634e487b7160e01b600052602160045260246000fd5b9052565b60208101610760828461230b565b60008060006060848603121561235057600080fd5b833561235b8161227f565b9250602084013561236b8161227f565b929592945050506040919091013590565b6000806040838503121561238f57600080fd5b50508035926020909101359150565b6000602082840312156123b057600080fd5b81356109ad8161227f565b6020808252825182820181905260009190848201906040850190845b818110156123fc5783516001600160a01b0316835292840192918401916001016123d7565b50909695505050505050565b60078110610d6157600080fd5b6effffffffffffffffffffffffffffff81168114610d6157600080fd5b60008060006060848603121561244757600080fd5b833561245281612408565b9250602084013561246281612415565b9150604084013561230081612415565b8015158114610d6157600080fd5b6000806040838503121561249357600080fd5b823561249e8161227f565b915060208301356124ae81612472565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156124f8576124f86124b9565b604052919050565b6000806000806080858703121561251657600080fd5b84356125218161227f565b93506020858101356125328161227f565b935060408601359250606086013567ffffffffffffffff8082111561255657600080fd5b818801915088601f83011261256a57600080fd5b81358181111561257c5761257c6124b9565b61258e601f8201601f191685016124cf565b915080825289848285010111156125a457600080fd5b808484018584013760008482840101525080935050505092959194509250565b60006060820190506125d782845161230b565b60208301516effffffffffffffffffffffffffffff8082166020850152806040860151166040850152505092915050565b6000806040838503121561261b57600080fd5b82356126268161227f565b915060208301356124ae8161227f565b6000806000806080858703121561264c57600080fd5b84356126578161227f565b9350602085013561266781612408565b9250604085013561267781612415565b9150606085013561268781612415565b939692955090935050565b600181811c908216806126a657607f821691505b602082108114156126c757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156126fd576126fd6126cd565b500290565b60008261271f57634e487b7160e01b600052601260045260246000fd5b500490565b60006060828403121561273657600080fd5b6040516060810181811067ffffffffffffffff82111715612759576127596124b9565b604052825161276781612408565b8152602083015161277781612415565b6020820152604083015161278a81612415565b60408201529392505050565b6000602082840312156127a857600080fd5b81516109ad81612472565b600060208083850312156127c657600080fd5b825167ffffffffffffffff808211156127de57600080fd5b818501915085601f8301126127f257600080fd5b815181811115612804576128046124b9565b8060051b91506128158483016124cf565b818152918301840191848101908884111561282f57600080fd5b938501935b8385101561285957845192506128498361227f565b8282529385019390850190612834565b98975050505050505050565b6001600160a01b0383168152604081016109ad602083018461230b565b600083516128948184602088016121fb565b8351908301906128a88183602088016121fb565b01949350505050565b600082198211156128c4576128c46126cd565b500190565b60006001600160a01b038087168352808616602084015250836040830152608060608301526128fb6080830184612227565b9695505050505050565b60006020828403121561291757600080fd5b81516109ad816121c856fea264697066735822122064e43deb5960f50bae70749b923cd676c23a115e7e6a224cf75242ea5c28436964736f6c63430008090033",
  "deployedBytecode": "0x60806040526004361061026a5760003560e01c80636352211e11610153578063a22cb465116100cb578063d007af5c1161007f578063e985e9c511610064578063e985e9c5146106cc578063f2fde38b14610715578063fd762d921461073557600080fd5b8063d007af5c146106a1578063d73792a9146106b657600080fd5b8063b88d4fde116100b0578063b88d4fde1461064c578063be537f431461065f578063c87b56dd1461068157600080fd5b8063a22cb4651461060c578063a9fc664e1461062c57600080fd5b806381ddcc1f1161012257806395d89b411161010757806395d89b41146105b75780639d645a44146105cc578063a1448194146105ec57600080fd5b806381ddcc1f146105665780638da5cb5b1461059957600080fd5b80636352211e146104fc5780636c3b86991461051c57806370a0823114610531578063715018a61461055157600080fd5b806323b872dd116101e657806342842e0e116101b5578063495c8bf91161019a578063495c8bf9146104855780635d4c1d46146104a757806361347162146104dc57600080fd5b806342842e0e1461045257806342966c681461046557600080fd5b806323b872dd146103c05780632a55205a146103d35780632e8da8291461041257806340c10f191461043257600080fd5b8063095ea7b31161023d57806318160ddd1161022257806318160ddd146103575780631b25b0771461037e5780631c33b3281461039e57600080fd5b8063095ea7b314610324578063098144d41461033957600080fd5b8063014635461461026f57806301ffc9a7146102b257806306fdde03146102e2578063081812fc14610304575b600080fd5b34801561027b57600080fd5b5061029571721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102be57600080fd5b506102d26102cd3660046121de565b610755565b60405190151581526020016102a9565b3480156102ee57600080fd5b506102f7610766565b6040516102a99190612253565b34801561031057600080fd5b5061029561031f366004612266565b6107f8565b610337610332366004612294565b610855565b005b34801561034557600080fd5b506009546001600160a01b0316610295565b34801561036357600080fd5b5060015460005403600019015b6040519081526020016102a9565b34801561038a57600080fd5b506102d26103993660046122c0565b61091b565b3480156103aa57600080fd5b506103b3600181565b6040516102a9919061232d565b6103376103ce36600461233b565b6109b4565b3480156103df57600080fd5b506103f36103ee36600461237c565b610b9c565b604080516001600160a01b0390931683526020830191909152016102a9565b34801561041e57600080fd5b506102d261042d36600461239e565b610bf8565b34801561043e57600080fd5b5061033761044d366004612294565b610d2a565b61033761046036600461233b565b610d38565b34801561047157600080fd5b50610337610480366004612266565b610d58565b34801561049157600080fd5b5061049a610d64565b6040516102a991906123bb565b3480156104b357600080fd5b506104bc600181565b6040516effffffffffffffffffffffffffffff90911681526020016102a9565b3480156104e857600080fd5b506103376104f7366004612432565b610e9b565b34801561050857600080fd5b50610295610517366004612266565b611040565b34801561052857600080fd5b5061033761104b565b34801561053d57600080fd5b5061037061054c36600461239e565b611143565b34801561055d57600080fd5b506103376111ab565b34801561057257600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610370565b3480156105a557600080fd5b506008546001600160a01b0316610295565b3480156105c357600080fd5b506102f76111bf565b3480156105d857600080fd5b506102d26105e736600461239e565b6111ce565b3480156105f857600080fd5b50610337610607366004612294565b6112ad565b34801561061857600080fd5b50610337610627366004612480565b6112b7565b34801561063857600080fd5b5061033761064736600461239e565b611330565b61033761065a366004612500565b61148a565b34801561066b57600080fd5b506106746114ce565b6040516102a991906125c4565b34801561068d57600080fd5b506102f761069c366004612266565b611598565b3480156106ad57600080fd5b5061049a611642565b3480156106c257600080fd5b5061037061271081565b3480156106d857600080fd5b506102d26106e7366004612608565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561072157600080fd5b5061033761073036600461239e565b611712565b34801561074157600080fd5b50610337610750366004612636565b6117a4565b6000610760826118c8565b92915050565b60606002805461077590612692565b80601f01602080910402602001604051908101604052809291908181526020018280546107a190612692565b80156107ee5780601f106107c3576101008083540402835291602001916107ee565b820191906000526020600020905b8154815290600101906020018083116107d157829003601f168201915b5050505050905090565b600061080382611916565b610839576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061086082611040565b9050336001600160a01b038216146108b25761087c81336106e7565b6108b2576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6009546000906001600160a01b0316156109a95760095460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301529091169063285fb8c89060640160006040518083038186803b15801561098457600080fd5b505afa925050508015610995575060015b6109a1575060006109ad565b5060016109ad565b5060015b9392505050565b60006109bf8261194b565b9050836001600160a01b0316816001600160a01b031614610a0c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090208054610a388187335b6001600160a01b039081169116811491141790565b610a6357610a4686336106e7565b610a6357604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610aa3576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ab086868660016119cd565b8015610abb57600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040902055600160e11b8316610b465760018401600081815260046020526040902054610b44576000548114610b445760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610b9486868660016119fb565b505050505050565b6000828152600b602052604081205481906001600160a01b0316612710610be37f0000000000000000000000000000000000000000000000000000000000000000866126e3565b610bed9190612702565b915091509250929050565b6009546000906001600160a01b031615610d2257600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063d72dde5e90829063b95545529060240160606040518083038186803b158015610c5757600080fd5b505afa158015610c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8f9190612724565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044015b60206040518083038186803b158015610cea57600080fd5b505afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190612796565b506000919050565b610d348282611a22565b5050565b610d538383836040518060200160405280600081525061148a565b505050565b610d6181611a56565b50565b6009546060906001600160a01b031615610e8857600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690633fe5df9990829063b95545529060240160606040518083038186803b158015610dc357600080fd5b505afa158015610dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfb9190612724565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024015b60006040518083038186803b158015610e4757600080fd5b505afa158015610e5b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e8391908101906127b3565b905090565b5060408051600081526020810190915290565b610ea3611a8a565b6000610eb76009546001600160a01b031690565b90506001600160a01b038116610ef9576040517f39ffc7ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c090610f279030908890600401612865565b600060405180830381600087803b158015610f4157600080fd5b505af1158015610f55573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff861660248201526001600160a01b0384169250632304aa029150604401600060405180830381600087803b158015610fb157600080fd5b505af1158015610fc5573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0384169250638d74431491506044015b600060405180830381600087803b15801561102257600080fd5b505af1158015611036573d6000803e3d6000fd5b5050505050505050565b60006107608261194b565b611053611a8a565b61106e71721c310194ccfc01e523fc93c9cccfa2a0ac611330565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c0906110a6903090600190600401612865565b600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526001602482015271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150604401600060405180830381600087803b15801561112957600080fd5b505af115801561113d573d6000803e3d6000fd5b50505050565b60006001600160a01b038216611185576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6111b3611a8e565b6111bd6000611ae8565b565b60606003805461077590612692565b6009546000906001600160a01b031615610d2257600954604051635caaa2a960e11b81523060048201526001600160a01b0390911690639445f53090829063b95545529060240160606040518083038186803b15801561122d57600080fd5b505afa158015611241573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112659190612724565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b0385166024820152604401610cd2565b610d348282611b47565b3360008181526007602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611324911515815260200190565b60405180910390a35050565b611338611a8a565b60006001600160a01b0382163b156113c6576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b15801561138a57600080fd5b505afa9250505080156113ba575060408051601f3d908101601f191682019092526113b791810190612796565b60015b6113c3576113c6565b90505b6001600160a01b038216158015906113dc575080155b15611413576040517f32483afb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600954604080516001600160a01b03928316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a1506009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6114958484846109b4565b6001600160a01b0383163b1561113d576114b184848484611b61565b61113d576040516368d2bf6b60e11b815260040160405180910390fd5b60408051606081018252600080825260208201819052918101919091526009546001600160a01b03161561157757600954604051635caaa2a960e11b81523060048201526001600160a01b039091169063b95545529060240160606040518083038186803b15801561153f57600080fd5b505afa158015611553573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190612724565b50604080516060810182526000808252602082018190529181019190915290565b60606115a382611916565b6115d9576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115f060408051602081019091526000815290565b905080516000141561161157604051806020016040528060008152506109ad565b8061161b84611c58565b60405160200161162c929190612882565b6040516020818303038152906040529392505050565b6009546060906001600160a01b031615610e8857600954604051635caaa2a960e11b81523060048201526001600160a01b03909116906317e94a6c90829063b95545529060240160606040518083038186803b1580156116a157600080fd5b505afa1580156116b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d99190612724565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff9091166004820152602401610e2f565b61171a611a8e565b6001600160a01b03811661179b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610d6181611ae8565b6117ac611a8a565b6117b584611330565b604051630368065360e61b81526001600160a01b0385169063da0194c0906117e39030908790600401612865565b600060405180830381600087803b1580156117fd57600080fd5b505af1158015611811573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0387169250632304aa029150604401600060405180830381600087803b15801561186d57600080fd5b505af1158015611881573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff841660248201526001600160a01b0387169250638d7443149150604401611008565b60006001600160e01b031982167f2a55205a00000000000000000000000000000000000000000000000000000000148061076057506301ffc9a760e01b6001600160e01b0319831614610760565b60008160011115801561192a575060005482105b8015610760575050600090815260046020526040902054600160e01b161590565b6000818060011161199b5760005481101561199b57600081815260046020526040902054600160e01b8116611999575b806109ad57506000190160008181526004602052604090205461197b565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156119f4576119ec85856119e784876128b1565b611ca6565b6001016119d0565b5050505050565b60005b818110156119f457611a1a8585611a1584876128b1565b611d02565b6001016119fe565b60008054905b82811015611a4b57611a4384611a3e83856128b1565b611d50565b600101611a28565b50610d538383611e1a565b611a5f81611f5a565b6000908152600b60205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055565b6111bd5b6008546001600160a01b031633146111bd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611792565b600880546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610d34828260405180602001604052806000815250611f65565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611b969033908990889088906004016128c9565b602060405180830381600087803b158015611bb057600080fd5b505af1925050508015611be0575060408051601f3d908101601f19168201909252611bdd91810190612905565b60015b611c3b573d808015611c0e576040519150601f19603f3d011682016040523d82523d6000602084013e611c13565b606091505b508051611c33576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480611c8f57611c94565b611c72565b50819003601f19909101908152919050565b6001600160a01b038381161590831615818015611cc05750805b15611cde57604051635cbd944160e01b815260040160405180910390fd5b8115611cea575b6119f4565b8015611cf557611ce5565b6119f43386868634611fcb565b6001600160a01b038381161590831615818015611d1c5750805b15611d3a57604051635cbd944160e01b815260040160405180910390fd5b8115611d4557611ce5565b8015611ce557611ce5565b6001600160a01b038216611d90576040517fa921732400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600b60205260409020546001600160a01b031615611ddf576040517f3343309b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600b60205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60005481611e54576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e6160008483856119cd565b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b818114611f1057808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101611ed8565b5081611f48576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908155610d5391508483856119fb565b610d61816000612050565b611f6f8383611a22565b6001600160a01b0383163b15610d53576000548281035b611f996000868380600101945086611b61565b611fb6576040516368d2bf6b60e11b815260040160405180910390fd5b818110611f865781600054146119f457600080fd5b6009546001600160a01b0316156119f45760095460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301529091169063285fb8c89060640160006040518083038186803b15801561203157600080fd5b505afa158015612045573d6000803e3d6000fd5b505050505050505050565b600061205b8361194b565b90508060008061207986600090815260066020526040902080549091565b9150915084156120b95761208e818433610a23565b6120b95761209c83336106e7565b6120b957604051632ce44b5f60e11b815260040160405180910390fd5b6120c78360008860016119cd565b80156120d257600082555b6001600160a01b038316600081815260056020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b177c030000000000000000000000000000000000000000000000000000000017600087815260046020526040902055600160e11b841661217257600186016000818152600460205260409020546121705760005481146121705760008181526004602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a46121b88360008860016119fb565b5050600180548101905550505050565b6001600160e01b031981168114610d6157600080fd5b6000602082840312156121f057600080fd5b81356109ad816121c8565b60005b838110156122165781810151838201526020016121fe565b8381111561113d5750506000910152565b6000815180845261223f8160208601602086016121fb565b601f01601f19169290920160200192915050565b6020815260006109ad6020830184612227565b60006020828403121561227857600080fd5b5035919050565b6001600160a01b0381168114610d6157600080fd5b600080604083850312156122a757600080fd5b82356122b28161227f565b946020939093013593505050565b6000806000606084860312156122d557600080fd5b83356122e08161227f565b925060208401356122f08161227f565b915060408401356123008161227f565b809150509250925092565b6007811061232957634e487b7160e01b600052602160045260246000fd5b9052565b60208101610760828461230b565b60008060006060848603121561235057600080fd5b833561235b8161227f565b9250602084013561236b8161227f565b929592945050506040919091013590565b6000806040838503121561238f57600080fd5b50508035926020909101359150565b6000602082840312156123b057600080fd5b81356109ad8161227f565b6020808252825182820181905260009190848201906040850190845b818110156123fc5783516001600160a01b0316835292840192918401916001016123d7565b50909695505050505050565b60078110610d6157600080fd5b6effffffffffffffffffffffffffffff81168114610d6157600080fd5b60008060006060848603121561244757600080fd5b833561245281612408565b9250602084013561246281612415565b9150604084013561230081612415565b8015158114610d6157600080fd5b6000806040838503121561249357600080fd5b823561249e8161227f565b915060208301356124ae81612472565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156124f8576124f86124b9565b604052919050565b6000806000806080858703121561251657600080fd5b84356125218161227f565b93506020858101356125328161227f565b935060408601359250606086013567ffffffffffffffff8082111561255657600080fd5b818801915088601f83011261256a57600080fd5b81358181111561257c5761257c6124b9565b61258e601f8201601f191685016124cf565b915080825289848285010111156125a457600080fd5b808484018584013760008482840101525080935050505092959194509250565b60006060820190506125d782845161230b565b60208301516effffffffffffffffffffffffffffff8082166020850152806040860151166040850152505092915050565b6000806040838503121561261b57600080fd5b82356126268161227f565b915060208301356124ae8161227f565b6000806000806080858703121561264c57600080fd5b84356126578161227f565b9350602085013561266781612408565b9250604085013561267781612415565b9150606085013561268781612415565b939692955090935050565b600181811c908216806126a657607f821691505b602082108114156126c757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156126fd576126fd6126cd565b500290565b60008261271f57634e487b7160e01b600052601260045260246000fd5b500490565b60006060828403121561273657600080fd5b6040516060810181811067ffffffffffffffff82111715612759576127596124b9565b604052825161276781612408565b8152602083015161277781612415565b6020820152604083015161278a81612415565b60408201529392505050565b6000602082840312156127a857600080fd5b81516109ad81612472565b600060208083850312156127c657600080fd5b825167ffffffffffffffff808211156127de57600080fd5b818501915085601f8301126127f257600080fd5b815181811115612804576128046124b9565b8060051b91506128158483016124cf565b818152918301840191848101908884111561282f57600080fd5b938501935b8385101561285957845192506128498361227f565b8282529385019390850190612834565b98975050505050505050565b6001600160a01b0383168152604081016109ad602083018461230b565b600083516128948184602088016121fb565b8351908301906128a88183602088016121fb565b01949350505050565b600082198211156128c4576128c46126cd565b500190565b60006001600160a01b038087168352808616602084015250836040830152608060608301526128fb6080830184612227565b9695505050505050565b60006020828403121561291757600080fd5b81516109ad816121c856fea264697066735822122064e43deb5960f50bae70749b923cd676c23a115e7e6a224cf75242ea5c28436964736f6c63430008090033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
