[ { "inputs": [], "name": "EditionDoesNotExist", "type": "error" }, { "inputs": [], "name": "InvalidManager", "type": "error" }, { "inputs": [], "name": "InvalidSize", "type": "error" }, { "inputs": [], "name": "ManagerDoesNotExist", "type": "error" }, { "inputs": [], "name": "ManagerRemoveBlocked", "type": "error" }, { "inputs": [], "name": "ManagerSwapBlocked", "type": "error" }, { "inputs": [], "name": "MetadataUpdateBlocked", "type": "error" }, { "inputs": [], "name": "MintFrozen", "type": "error" }, { "inputs": [], "name": "MinterRegistrationInvalid", "type": "error" }, { "inputs": [], "name": "NotMinter", "type": "error" }, { "inputs": [], "name": "RoyaltyBPSInvalid", "type": "error" }, { "inputs": [], "name": "RoyaltySetBlocked", "type": "error" }, { "inputs": [], "name": "SoldOut", "type": "error" }, { "inputs": [], "name": "TokenDoesNotExist", "type": "error" }, { "inputs": [], "name": "Unauthorized", "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": "recipientAddress", "type": "address" }, { "indexed": true, "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "name": "DefaultRoyaltySet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newDefaultTokenManager", "type": "address" } ], "name": "DefaultTokenManagerChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "size", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "editionTokenManager", "type": "address" } ], "name": "EditionCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "indexed": false, "internalType": "struct IRoyaltyManager.Royalty[]", "name": "_newRoyalties", "type": "tuple[]" } ], "name": "GranularRoyaltiesSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" } ], "name": "GranularTokenManagersRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" }, { "indexed": false, "internalType": "address[]", "name": "_tokenManagers", "type": "address[]" } ], "name": "GranularTokenManagersSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "minter", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "registered", "type": "bool" } ], "name": "MinterRegistrationChanged", "type": "event" }, { "anonymous": false, "inputs": [], "name": "MintsFrozen", "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": "newRoyaltyManager", "type": "address" } ], "name": "RoyaltyManagerChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_editionUri", "type": "string" }, { "internalType": "uint256", "name": "_editionSize", "type": "uint256" }, { "internalType": "address", "name": "_editionTokenManager", "type": "address" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "editionRoyalty", "type": "tuple" }, { "internalType": "bytes", "name": "mintVectorData", "type": "bytes" } ], "name": "createEdition", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_editionUri", "type": "string" }, { "internalType": "bytes", "name": "auctionData", "type": "bytes" }, { "internalType": "address", "name": "_editionTokenManager", "type": "address" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "editionRoyalty", "type": "tuple" } ], "name": "createEditionWithAuction", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_editionUri", "type": "string" }, { "internalType": "uint256", "name": "_editionSize", "type": "uint256" }, { "internalType": "address", "name": "_editionTokenManager", "type": "address" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "editionRoyalty", "type": "tuple" }, { "internalType": "bytes", "name": "mechanicVectorData", "type": "bytes" } ], "name": "createEditionWithMechanicVector", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_editionUri", "type": "string" }, { "internalType": "uint256", "name": "_editionSize", "type": "uint256" }, { "internalType": "address", "name": "_editionTokenManager", "type": "address" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "editionRoyalty", "type": "tuple" }, { "internalType": "bytes", "name": "mintVectorData", "type": "bytes" }, { "internalType": "bytes", "name": "mechanicVectorData", "type": "bytes" } ], "name": "createEditionWithMechanicVectorAndPublicFixedPriceVector", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "defaultManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "editionCurrentSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "editionMaxSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "editionStartId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" } ], "name": "editionURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "freezeMints", "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": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" } ], "name": "getEditionDetails", "outputs": [ { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "uint256", "name": "size", "type": "uint256" }, { "internalType": "uint256", "name": "supply", "type": "uint256" }, { "internalType": "uint256", "name": "initialTokenId", "type": "uint256" } ], "internalType": "struct IEditionCollection.EditionDetails", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getEditionId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getEditionStartIds", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "editionIds", "type": "uint256[]" } ], "name": "getEditionsDetailsAndUri", "outputs": [ { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "uint256", "name": "size", "type": "uint256" }, { "internalType": "uint256", "name": "supply", "type": "uint256" }, { "internalType": "uint256", "name": "initialTokenId", "type": "uint256" } ], "internalType": "struct IEditionCollection.EditionDetails[]", "name": "", "type": "tuple[]" }, { "internalType": "string[]", "name": "", "type": "string[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "creator", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "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": "forwarder", "type": "address" } ], "name": "isTrustedForwarder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintAmountToRecipient", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "internalType": "address[]", "name": "recipients", "type": "address[]" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintAmountToRecipients", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "mintOneToRecipient", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "internalType": "address[]", "name": "recipients", "type": "address[]" } ], "name": "mintOneToRecipients", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "minters", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "observability", "outputs": [ { "internalType": "contract IObservability", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "registerMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "removeDefaultTokenManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" } ], "name": "removeGranularTokenManagers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "removeRoyaltyManager", "outputs": [], "stateMutability": "nonpayable", "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": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "royaltyManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "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": "string", "name": "newName", "type": "string" }, { "internalType": "string", "name": "newSymbol", "type": "string" }, { "internalType": "string", "name": "newContractUri", "type": "string" } ], "name": "setContractMetadata", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "_royalty", "type": "tuple" } ], "name": "setDefaultRoyalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_defaultTokenManager", "type": "address" } ], "name": "setDefaultTokenManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "editionId", "type": "uint256" }, { "internalType": "string", "name": "_uri", "type": "string" } ], "name": "setEditionURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty[]", "name": "_newRoyalties", "type": "tuple[]" } ], "name": "setGranularRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" }, { "internalType": "address[]", "name": "_tokenManagers", "type": "address[]" } ], "name": "setGranularTokenManagers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_royaltyManager", "type": "address" } ], "name": "setRoyaltyManager", "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": "id", "type": "uint256" } ], "name": "tokenManager", "outputs": [ { "internalType": "address", "name": "manager", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenManagerByTokenId", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "unregisterMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561001057600080fd5b50615f2f80620000216000396000f3fe608060405234801561001057600080fd5b506004361061029e5760003560e01c806301ffc9a7146102a3578063063a7502146102cb5780630690a78d146102d557806306fdde03146102e8578063081812fc146102fd578063095ea7b31461031d57806317360d341461033057806318160ddd1461035157806318bae6c8146103675780631b30808d1461037a57806323b872dd1461038d5780632a55205a146103a05780632a5ac764146103c1578063336211bf146103d4578063377e5e27146103e757806342842e0e146103fa57806342966c681461040d57806346134b501461042057806347230dcb146104335780634f58122a1461044657806350cf5a3114610459578063572b6c051461046c5780636352211e1461047f5780636502abea14610492578063662fff38146104a55780636b15fd45146104b8578063703c19d7146104cb57806370a08231146104e0578063715018a6146104f357806375794a3c146104fb578063834a20df146105055780638da5cb5b1461051857806391d0049e14610520578063921727041461053357806395d89b4114610546578063994d8d9a1461054e578063a22cb46514610561578063a305f5b214610574578063b5c5801e14610587578063b859c9351461058f578063b88d4fde146105a2578063bfb2995c146105b5578063c2f50701146105c8578063c73ef573146105d0578063c87b56dd146105e3578063d1f57894146105f6578063ddf990f914610609578063e8a3d48514610629578063e985e9c514610631578063eb87215014610644578063ee295d6214610657578063ee947a9a1461066a578063eeab05891461067d578063ef60ceaf14610690578063f2fde38b146106a3578063f775baac146106b6578063f97b57ec146106c9578063fac70dc9146106de575b600080fd5b6102b66102b13660046147fe565b6106f1565b60405190151581526020015b60405180910390f35b6102d3610702565b005b6102d36102e336600461485c565b6107c2565b6102f06109fd565b6040516102c291906148ff565b61031061030b366004614912565b610a90565b6040516102c29190614938565b6102d361032b366004614961565b610ab8565b61034361033e3660046149d1565b610bd2565b6040516102c2929190614aa6565b610359610d25565b6040519081526020016102c2565b60cb54610310906001600160a01b031681565b610359610388366004614b1c565b610d79565b6102d361039b366004614b54565b610e0d565b6103b36103ae366004614b84565b610e45565b6040516102c2929190614ba6565b6102d36103cf366004614bbf565b610e65565b6103596103e2366004614912565b610efb565b6102f06103f5366004614912565b610f23565b6102d3610408366004614b54565b610fe4565b6102d361041b366004614912565b610fff565b61031061042e366004614912565b6111c5565b6102d3610441366004614c58565b6111d3565b6102d36104543660046149d1565b611287565b6102d3610467366004614c58565b6114a9565b6102b661047a366004614c58565b611649565b61031061048d366004614912565b61165d565b6103106104a0366004614912565b611679565b6103596104b3366004614d52565b6116a4565b6103596104c6366004614e8b565b61171d565b6104d36119c7565b6040516102c29190614f8a565b6103596104ee366004614c58565b611a1f565b6102d3611a8c565b6103596101365481565b6102d3610513366004614c58565b611a9e565b610310611b1c565b61035961052e366004614f9d565b611b2b565b610359610541366004615018565b611d0e565b6102f0611d94565b61035961055c366004615054565b611da4565b6102d361056f3660046150e9565b611f34565b6102d3610582366004614c58565b611f46565b6102d36120aa565b61035961059d366004615122565b6121fe565b6102d36105b0366004615147565b612278565b6102d36105c33660046151b2565b6122b7565b6102d36125d7565b6103596105de366004614912565b6126e8565b6102f06105f1366004614912565b61270a565b6102d361060436600461524b565b6127d8565b61061c610617366004614912565b612959565b6040516102c29190615290565b6102f061298a565b6102b661063f3660046152a3565b612a19565b60d054610310906001600160a01b031681565b60cf54610310906001600160a01b031681565b610359610678366004614912565b612a48565b6102d361068b3660046152d1565b612a59565b6102d361069e36600461533c565b612d23565b6102d36106b1366004614c58565b612ef7565b6103596106c4366004614f9d565b612f6d565b6106d16130aa565b6040516102c2919061534e565b6103596106ec366004614912565b6130bb565b60006106fc826130cc565b92915050565b61070a61311c565b61071261318b565b60cf805460ff60a01b1916600160a01b1790556040517f9d4b38394dff663b46f53f52ced584161b5021180321b381f6104325eecebf4990600090a160d060009054906101000a90046001600160a01b03166001600160a01b031663fd120bd26040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561079e57600080fd5b505af11580156107b2573d6000803e3d6000fd5b505050506107c06001609755565b565b60006107cd84611679565b905060006107d96131ec565b90506001600160a01b0382166108235760006107f3611b1c565b9050806001600160a01b0316826001600160a01b03161461081d5761081d6282b42960e81b6131f6565b506108b1565b604051634e9173c760e11b81526001600160a01b03831690639d22e78e9061085a90309085908a908a908a906006906004016153da565b6020604051808303816000875af1158015610879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089d9190615441565b6108b1576108b1631b04458960e01b6131f6565b600085815261013a602052604090206108cb9085856146b3565b506040805160018082528183019092526000916020808301908036833701905050905085816000815181106109025761090261545e565b6020908102919091010152604080516001808252818301909252600091816020015b606081526020019060019003908161092457905050905085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508551869450909250151590506109855761098561545e565b602090810291909101015260d0546040516374c1ace160e01b81526001600160a01b03909116906374c1ace1906109c29085908590600401615474565b600060405180830381600087803b1580156109dc57600080fd5b505af11580156109f0573d6000803e3d6000fd5b5050505050505050505050565b60606101038054610a0d90615499565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3990615499565b8015610a865780601f10610a5b57610100808354040283529160200191610a86565b820191906000526020600020905b815481529060010190602001808311610a6957829003601f168201915b5050505050905090565b6000610a9b826131ff565b50600090815261010760205260409020546001600160a01b031690565b6000610ac38261165d565b9050806001600160a01b0316836001600160a01b03161415610b235760405162461bcd60e51b81526020600482015260146024820152734552433732313a20616c7265616479206f776e7360601b60448201526064015b60405180910390fd5b806001600160a01b0316610b356131ec565b6001600160a01b03161480610b515750610b518161063f6131ec565b610bc35760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610b1a565b610bcd838361324f565b505050565b606080826000816001600160401b03811115610bf057610bf0614c75565b604051908082528060200260200182016040528015610c2957816020015b610c16614737565b815260200190600190039081610c0e5790505b5090506000826001600160401b03811115610c4657610c46614c75565b604051908082528060200260200182016040528015610c7957816020015b6060815260200190600190039081610c645790505b50905060005b83811015610d1657610ca8888883818110610c9c57610c9c61545e565b90506020020135610f23565b828281518110610cba57610cba61545e565b6020026020010181905250610ce6888883818110610cda57610cda61545e565b905060200201356132be565b838281518110610cf857610cf861545e565b60200260200101819052508080610d0e906154e4565b915050610c7f565b509093509150505b9250929050565b600080805b61013754811015610d73576101378181548110610d4957610d4961545e565b906000526020600020015482610d5f91906154ff565b915080610d6b816154e4565b915050610d2a565b50919050565b6000610d8e610d866131ec565b60c990613357565b610da257610da2633e34a41b60e21b6131f6565b610daa61318b565b60cf54600160a01b900460ff1660011415610dcf57610dcf6345a9661760e01b6131f6565b610ddb84610137541190565b610def57610def63eb49290360e01b6131f6565b610dfa84848461336c565b9050610e066001609755565b9392505050565b610e1e610e186131ec565b82613464565b610e3a5760405162461bcd60e51b8152600401610b1a90615517565b610bcd8383836134c2565b600080610e5a610e5485613642565b846136e6565b915091509250929050565b610e6d61311c565b610e7986868686613781565b610e8661013583836146b3565b5060d054604051635bf57bc360e01b81526001600160a01b0390911690635bf57bc390610ec19089908990899089908990899060040161554c565b600060405180830381600087803b158015610edb57600080fd5b505af1158015610eef573d6000803e3d6000fd5b50505050505050505050565b6000610f068261379c565b610f1a57610f1a63677510db60e11b6131f6565b6106fc82613642565b6060610f3182610137541190565b610f4557610f4563eb49290360e01b6131f6565b600082815261013a602052604090208054610f5f90615499565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8b90615499565b8015610fd85780601f10610fad57610100808354040283529160200191610fd8565b820191906000526020600020905b815481529060010190602001808311610fbb57829003601f168201915b50505050509050919050565b610bcd83838360405180602001604052806000815250612278565b61100761318b565b600061101282610efb565b9050600061101f82611679565b9050600061102b6131ec565b90506001600160a01b038216158015906110b457506040516301ffc9a760e01b81526001600160a01b038316906301ffc9a7906110739063129dae8b60e01b90600401615595565b602060405180830381865afa158015611090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b49190615441565b1561112857816001600160a01b031663129dae8b826110d28761165d565b866040518463ffffffff1660e01b81526004016110f1939291906155aa565b600060405180830381600087803b15801561110b57600080fd5b505af115801561111f573d6000803e3d6000fd5b50505050611145565b6111328185613464565b611145576111456282b42960e81b6131f6565b61114e846137ba565b60d0546040516323de665160e01b81526001600160a01b03909116906323de66519061118390849060009089906004016155aa565b600060405180830381600087803b15801561119d57600080fd5b505af11580156111b1573d6000803e3d6000fd5b505050505050506111c26001609755565b50565b60006106fc6104a083610efb565b6111db61311c565b6111e660c982613858565b6111fa576111fa63ea6eb5c360e01b6131f6565b6040516001906001600160a01b03831690600080516020615ec383398151915290600090a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f906112529084906001906004016155ce565b600060405180830381600087803b15801561126c57600080fd5b505af1158015611280573d6000803e3d6000fd5b5050505050565b61128f61318b565b60006112996131ec565b90508160005b818110156113fb57600060cc60008787858181106112bf576112bf61545e565b60209081029290920135835250810191909152604001600020546001600160a01b03169050806112f9576112f9635f98be1560e11b6131f6565b806001600160a01b031663ce2003a58588888681811061131b5761131b61545e565b905060200201356040518363ffffffff1660e01b815260040161133f929190614ba6565b6020604051808303816000875af115801561135e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113829190615441565b6113965761139663251c48e160e11b6131f6565b600060cc60008888868181106113ae576113ae61545e565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055505080806113f3906154e4565b91505061129f565b507f4d30c2588339a383e2c3092b5383924cf202ae9c377b76c5fe5208cd41d8d2aa848460405161142d92919061561f565b60405180910390a160d0546040516320364dcd60e21b81526001600160a01b03909116906380d9373490611467908790879060040161561f565b600060405180830381600087803b15801561148157600080fd5b505af1158015611495573d6000803e3d6000fd5b5050505050506114a56001609755565b5050565b6114b161318b565b6114ba8161386d565b6114ce576114ce631a7387bd60e11b6131f6565b60006114d86131ec565b60cf549091506001600160a01b031680611520576114f4611b1c565b6001600160a01b0316826001600160a01b03161461151b5761151b6282b42960e81b6131f6565b6115a6565b60405163bcdbc94760e01b81526001600160a01b038481166004830152838116602483015282169063bcdbc94790604401602060405180830381865afa15801561156e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115929190615441565b6115a6576115a663e10a050560e01b6131f6565b60cf80546001600160a01b0319166001600160a01b038516908117909155604051600080516020615f0383398151915290600090a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab4229061160b908690600401614938565b600060405180830381600087803b15801561162557600080fd5b505af1158015611639573d6000803e3d6000fd5b5050505050506111c26001609755565b6065546001600160a01b0391821691161490565b600090815261010560205260409020546001600160a01b031690565b60cb54600082815260cc60205260409020546001600160a01b0391821691168015610d735792915050565b60006116b1610d866131ec565b6116c5576116c5633e34a41b60e21b6131f6565b6116cd61318b565b60cf54600160a01b900460ff16600114156116f2576116f26345a9661760e01b6131f6565b6116fe84610137541190565b6117125761171263eb49290360e01b6131f6565b610dfa848484613889565b600061172761311c565b61172f61318b565b600061173c8a8a8a6139c6565b87519091506001600160a01b03161561179157600081815260ce6020908152604090912088518154928a015161ffff16600160a01b026001600160b01b03199093166001600160a01b03909116179190911790555b84156118f15760008060008060008060008060008e8e8101906117b49190615649565b985098509850985098509850985098509850886001600160a01b03166377a856ea604051806101c00160405280306001600160a01b031681526020018a65ffffffffffff1681526020018965ffffffffffff1681526020018b6001600160a01b031681526020018665ffffffffffff168152602001600065ffffffffffff168152602001846001600160a01b031681526020018765ffffffffffff1681526020018565ffffffffffff168152602001886001600160c01b031681526020018d65ffffffffffff1681526020016001151581526020016000151581526020016000801b8152506040518263ffffffff1660e01b81526004016118b59190615713565b600060405180830381600087803b1580156118cf57600080fd5b505af11580156118e3573d6000803e3d6000fd5b505050505050505050505050505b82156119af57600080808061190887890189615816565b6040805160c0810182523081526001600160601b038b1660208201526001600160a01b03808616828401526001606083015260006080830181905260a083015291516338a2f85160e21b8152959950939750919550935084169163e28be14491611978918890869060040161587e565b600060405180830381600087803b15801561199257600080fd5b505af11580156119a6573d6000803e3d6000fd5b50505050505050505b90506119bb6001609755565b98975050505050505050565b6060610139805480602002602001604051908101604052809291908181526020018280548015610a8657602002820191906000526020600020905b815481526020019060010190808311611a02575050505050905090565b60006001600160a01b038216611a6f5760405162461bcd60e51b815260206004820152601560248201527422a9219b99189d1024b73b30b634b21037bbb732b960591b6044820152606401610b1a565b506001600160a01b03166000908152610106602052604090205490565b611a9461311c565b6107c06000613b44565b611aa661311c565b611ab160c982613b96565b611ac557611ac563ea6eb5c360e01b6131f6565b6040516000906001600160a01b03831690600080516020615ec3833981519152908390a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f906112529084906000906004016155ce565b6033546001600160a01b031690565b6000611b3561311c565b611b3d61318b565b6000611b4a8888886139c6565b85519091506001600160a01b031615611b9f57600081815260ce60209081526040909120865181549288015161ffff16600160a01b026001600160b01b03199093166001600160a01b03909116179190911790555b8215611cf85760008080808080808080611bbb8c8e018e615649565b985098509850985098509850985098509850886001600160a01b03166377a856ea604051806101c00160405280306001600160a01b031681526020018a65ffffffffffff1681526020018965ffffffffffff1681526020018b6001600160a01b031681526020018665ffffffffffff168152602001600065ffffffffffff168152602001846001600160a01b031681526020018765ffffffffffff1681526020018565ffffffffffff168152602001886001600160c01b031681526020018d65ffffffffffff1681526020016001151581526020016000151581526020016000801b8152506040518263ffffffff1660e01b8152600401611cbc9190615713565b600060405180830381600087803b158015611cd657600080fd5b505af1158015611cea573d6000803e3d6000fd5b505050505050505050505050505b9050611d046001609755565b9695505050505050565b6000611d1b610d866131ec565b611d2f57611d2f633e34a41b60e21b6131f6565b611d3761318b565b60cf54600160a01b900460ff1660011415611d5c57611d5c6345a9661760e01b6131f6565b611d6883610137541190565b611d7c57611d7c63eb49290360e01b6131f6565b611d8883836001613889565b90506106fc6001609755565b60606101048054610a0d90615499565b6000611dae61311c565b611db661318b565b6000611dc4866001866139c6565b83519091506001600160a01b031615611e1957600081815260ce60209081526040909120845181549286015161ffff16600160a01b026001600160b01b03199093166001600160a01b03909116179190911790555b600080600080600089806020019051810190611e359190615908565b945094509450945094506000604051806101000160405280306001600160a01b03168152602001856001600160a01b03168152602001336001600160a01b03168152602001846001600160a01b031681526020018381526020016000815260200160011515815260200160016003811115611eb257611eb26153c4565b905260405163712f1bf760e11b81529091506001600160a01b0387169063e25e37ee90611ee790889085908c9060040161597d565b600060405180830381600087803b158015611f0157600080fd5b505af1158015611f15573d6000803e3d6000fd5b50989950505050505050505050611f2c6001609755565b949350505050565b6114a5611f3f6131ec565b8383613bab565b611f4e61318b565b611f5781613c77565b611f6b57611f6b631a7387bd60e11b6131f6565b6000611f756131ec565b60cb549091506001600160a01b031680611fbd57611f91611b1c565b6001600160a01b0316826001600160a01b031614611fb857611fb86282b42960e81b6131f6565b612045565b6040516342f19adb60e11b81526001600160a01b038216906385e335b690611fee9085906000908890600401615a10565b6020604051808303816000875af115801561200d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120319190615441565b6120455761204563e10a050560e01b6131f6565b60cb80546001600160a01b0319166001600160a01b038516908117909155604051600080516020615ea383398151915290600090a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd9061160b908690600401614938565b6120b261318b565b60006120bc6131ec565b60cb549091506001600160a01b0316806120e0576120e0635f98be1560e11b6131f6565b60405163ce2003a560e01b81526001600160a01b0382169063ce2003a59061210f908590600090600401614ba6565b6020604051808303816000875af115801561212e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121529190615441565b6121665761216663251c48e160e11b6131f6565b60cb80546001600160a01b0319169055604051600090600080516020615ea3833981519152908290a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd906121c090600090600401614938565b600060405180830381600087803b1580156121da57600080fd5b505af11580156121ee573d6000803e3d6000fd5b5050505050506107c06001609755565b600061220b610d866131ec565b61221f5761221f633e34a41b60e21b6131f6565b61222761318b565b60cf54600160a01b900460ff166001141561224c5761224c6345a9661760e01b6131f6565b61225883610137541190565b61226c5761226c63eb49290360e01b6131f6565b611d888383600161336c565b6122896122836131ec565b83613464565b6122a55760405162461bcd60e51b8152600401610b1a90615517565b6122b184848484613c93565b50505050565b6122bf61318b565b60006122c96131ec565b905060006122d5611b1c565b60cf549091506001600160a01b031685816123d657826001600160a01b0316846001600160a01b031614612312576123126282b42960e81b6131f6565b60005b818110156123d0576123588787838181106123325761233261545e565b905060400201602001602081019061234a9190615a33565b61271061ffff909116111590565b61236c5761236c633daf741f60e21b6131f6565b86868281811061237e5761237e61545e565b90506040020160ce60008b8b8581811061239a5761239a61545e565b90506020020135815260200190815260200160002081816123bb9190615a50565b508190506123c8816154e4565b915050612315565b50612524565b60005b81811015612522576123f68787838181106123325761233261545e565b61240a5761240a633daf741f60e21b6131f6565b826001600160a01b031663ad6e40c78a8a8481811061242b5761242b61545e565b905060200201358989858181106124445761244461545e565b905060400201886040518463ffffffff1660e01b815260040161246993929190615add565b602060405180830381865afa158015612486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124aa9190615441565b6124be576124be63270e710760e21b6131f6565b8686828181106124d0576124d061545e565b90506040020160ce60008b8b858181106124ec576124ec61545e565b905060200201358152602001908152602001600020818161250d9190615a50565b5081905061251a816154e4565b9150506123d9565b505b7feaf422d1ab2d8f38856ab6be8378c08d2886463a33667e896ba3a6ebf2c6260c888888886040516125599493929190615b0a565b60405180910390a160d054604051632be18fef60e11b81526001600160a01b03909116906357c31fde90612597908b908b908b908b90600401615b0a565b600060405180830381600087803b1580156125b157600080fd5b505af11580156125c5573d6000803e3d6000fd5b50505050505050506122b16001609755565b6125df61318b565b60006125e96131ec565b60cf549091506001600160a01b03168061260d5761260d635f98be1560e11b6131f6565b60405163680c607d60e11b81526001600160a01b0382169063d018c0fa90612639908590600401614938565b602060405180830381865afa158015612656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267a9190615441565b61268e5761268e63251c48e160e11b6131f6565b60cf80546001600160a01b0319169055604051600090600080516020615f03833981519152908290a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab422906121c090600090600401614938565b61013781815481106126f957600080fd5b600091825260209091200154905081565b60606127158261379c565b6127295761272963677510db60e11b6131f6565b600061273483610efb565b600081815261013a6020526040902080549192509061275290615499565b80601f016020809104026020016040519081016040528092919081815260200182805461277e90615499565b80156127cb5780601f106127a0576101008083540402835291602001916127cb565b820191906000526020600020905b8154815290600101906020018083116127ae57829003601f168201915b5050505050915050919050565b600054610100900460ff16158080156127f85750600054600160ff909116105b80612819575061280730613cc6565b158015612819575060005460ff166001145b61287c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b1a565b6000805460ff19166001179055801561289f576000805461ff0019166101001790555b6000806000806000806000888060200190518101906128be9190615c0b565b96509650965096509650965096506000604051806040016040528060006001600160a01b03168152602001600061ffff1681525090506129078b8260008b8b8b8b8b8b8b613cd5565b50505050505050508015610bcd576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b612961614737565b61296d82610137541190565b6129815761298163eb49290360e01b6131f6565b6106fc826132be565b610135805461299890615499565b80601f01602080910402602001604051908101604052809291908181526020018280546129c490615499565b8015612a115780601f106129e657610100808354040283529160200191612a11565b820191906000526020600020905b8154815290600101906020018083116129f457829003601f168201915b505050505081565b6001600160a01b0391821660009081526101086020908152604080832093909416825291909152205460ff1690565b61013881815481106126f957600080fd5b612a6161318b565b6000612a6b6131ec565b90506000612a77611b1c565b90508460005b81811015612c7057612ab4868683818110612a9a57612a9a61545e565b9050602002016020810190612aaf9190614c58565b613c77565b612ac857612ac8631a7387bd60e11b6131f6565b6000612aeb898984818110612adf57612adf61545e565b90506020020135611679565b90506001600160a01b038116612b2857836001600160a01b0316856001600160a01b031614612b2357612b236282b42960e81b6131f6565b612be6565b806001600160a01b03166385e335b6868b8b86818110612b4a57612b4a61545e565b600088815260cc60209081526040918290205491516001600160e01b031960e089901b168152612b8f969591909302013592506001600160a01b031690600401615a10565b6020604051808303816000875af1158015612bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd29190615441565b612be657612be663e10a050560e01b6131f6565b868683818110612bf857612bf861545e565b9050602002016020810190612c0d9190614c58565b60cc60008b8b86818110612c2357612c2361545e565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550508080612c68906154e4565b915050612a7d565b507facc0f6922d8ccd133dbdaee1908d4d734f25a540223d55145e9fad2898471a4e87878787604051612ca69493929190615ce9565b60405180910390a160d0546040516315bd85bf60e01b81526001600160a01b03909116906315bd85bf90612ce4908a908a908a908a90600401615ce9565b600060405180830381600087803b158015612cfe57600080fd5b505af1158015612d12573d6000803e3d6000fd5b505050505050506122b16001609755565b612d2b61318b565b612d3b6040820160208301615a33565b61271061ffff82161115612d5957612d59633daf741f60e21b6131f6565b6000612d636131ec565b60cf549091506001600160a01b031680612dab57612d7f611b1c565b6001600160a01b0316826001600160a01b031614612da657612da66282b42960e81b6131f6565b612e2e565b60405163049a5c0f60e41b81526001600160a01b038216906349a5c0f090612dd99087908690600401615d41565b602060405180830381865afa158015612df6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1a9190615441565b612e2e57612e2e63270e710760e21b6131f6565b8360cd612e3b8282615a50565b50612e4e90506040850160208601615a33565b61ffff16612e5f6020860186614c58565b6001600160a01b03167f2c5ea6e4103e78cb101e796fb2dace540362fc542cbff5145eaa24af7dd8fe4160405160405180910390a360d0546001600160a01b031663d10072c0612eb26020870187614c58565b612ec26040880160208901615a33565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015261ffff166024820152604401611183565b612eff61311c565b6001600160a01b038116612f645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b1a565b6111c281613b44565b6000612f7761311c565b612f7f61318b565b6000612f8c8888886139c6565b85519091506001600160a01b031615612fe157600081815260ce60209081526040909120865181549288015161ffff16600160a01b026001600160b01b03199093166001600160a01b03909116179190911790555b8215611cf8576000808080612ff887890189615816565b6040805160c0810182523081526001600160601b038b1660208201526001600160a01b03808616828401526001606083015260006080830181905260a083015291516338a2f85160e21b8152959950939750919550935084169163e28be14491613068918890869060040161587e565b600060405180830381600087803b15801561308257600080fd5b505af1158015613096573d6000803e3d6000fd5b50505050505050509050611d046001609755565b60606130b660c9613de6565b905090565b61013981815481106126f957600080fd5b60006001600160e01b031982166380ac58cd60e01b14806130fd57506001600160e01b03198216635b5e139f60e01b145b806106fc57506301ffc9a760e01b6001600160e01b03198316146106fc565b6131246131ec565b6001600160a01b0316613135611b1c565b6001600160a01b0316146107c05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b1a565b600260975414156131de5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b1a565b6002609755565b6001609755565b60006130b6613df3565b6111c281613e15565b6132088161379c565b6111c25760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b1a565b60008181526101076020526040902080546001600160a01b0319166001600160a01b03841690811790915581906132858261165d565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6132c6614737565b604051806080016040528060405180602001604052806000815250815260200161013884815481106132fa576132fa61545e565b90600052602060002001548152602001610137848154811061331e5761331e61545e565b9060005260206000200154815260200161013984815481106133425761334261545e565b90600052602060002001548152509050919050565b6000610e06836001600160a01b038416613e1f565b60008061013885815481106133835761338361545e565b90600052602060002001549050600061013786815481106133a6576133a661545e565b90600052602060002001549050600061013987815481106133c9576133c961545e565b600091825260208220015491506133e086846154ff565b9050838111156133fa576133fa6352df9fe560e01b6131f6565b60005b86811015613437576134188861341386866154ff565b613e37565b6134236001856154ff565b93508061342f816154e4565b9150506133fd565b5080610137898154811061344d5761344d61545e565b600091825260209091200155979650505050505050565b6000806134708361165d565b9050806001600160a01b0316846001600160a01b0316148061349757506134978185612a19565b80611f2c5750836001600160a01b03166134b084610a90565b6001600160a01b031614949350505050565b826001600160a01b03166134d58261165d565b6001600160a01b0316146135245760405162461bcd60e51b815260206004820152601660248201527522a9219b99189d10333937b6903737ba1037bbb732b960511b6044820152606401610b1a565b6001600160a01b0382166135785760405162461bcd60e51b815260206004820152601b60248201527a4552433732313a20746f20746865207a65726f206164647265737360281b6044820152606401610b1a565b60008181526101076020908152604080832080546001600160a01b03191690556001600160a01b038616835261010690915281208054600192906135bd908490615d67565b90915550506001600160a01b0382166000908152610106602052604081208054600192906135ec9084906154ff565b90915550506000818152610105602052604080822080546001600160a01b0319166001600160a01b038681169182179092559151849391871691600080516020615ee383398151915291a4610bcd838383613f48565b6101398054604080516020808402820181019092528281526000938493849383018282801561369057602002820191906000526020600020905b81548152602001906001019080831161367c575b505083519394506000925050505b818110156136dc578281815181106136b8576136b861545e565b602002602001015186106136ca578093505b6136d56001826154ff565b905061369e565b5091949350505050565b600082815260ce602090815260408083208151808301909252546001600160a01b038116808352600160a01b90910461ffff1692820192909252829161375157506040805180820190915260cd546001600160a01b0381168252600160a01b900461ffff1660208201525b805160208201519093506127109061376d9061ffff1686615d7e565b6137779190615d9d565b9150509250929050565b61378e61010385856146b3565b5061128061010483836146b3565b600090815261010560205260409020546001600160a01b0316151590565b60006137c58261165d565b60008381526101076020908152604080832080546001600160a01b03191690556001600160a01b03841683526101069091528120805492935060019290919061380f908490615d67565b90915550506000828152610105602052604080822080546001600160a01b0319169055518391906001600160a01b03841690600080516020615ee3833981519152908390a45050565b6000610e06836001600160a01b0384166140cd565b60006106fc6001600160a01b03831663440444c560e11b614117565b60008083519050600061013886815481106138a6576138a661545e565b90600052602060002001549050600061013787815481106138c9576138c961545e565b90600052602060002001549050600061013988815481106138ec576138ec61545e565b600091825260208220015491506139038786615d7e565b61390d90846154ff565b905083811115613927576139276352df9fe560e01b6131f6565b60005b858110156139985760005b88811015613985576139668a83815181106139525761395261545e565b6020026020010151868661341391906154ff565b6139716001866154ff565b94508061397d816154e4565b915050613935565b5080613990816154e4565b91505061392a565b50826101378a815481106139ae576139ae61545e565b60009182526020909120015598975050505050505050565b6000826139dd576139dd630ffd11ad60e01b6131f6565b6101398054610136805460018084019094557f22d66071756d4d57920b8322c1a903a27bd75b44065e925d5f9f1c08908d28f683015561013880548085019091557ff79a63dcec80ed75c82f36161f17b9c2f407860160383a7be0a0ee7962c527ae018690556101378054938401815560009081527f43dc304bb3613567eca51c4fb9e7f3128bc51bba882a32550e891d6cbd8a0fa1909301839055805491928692613a8a9084906154ff565b9091555050600081815261013a602090815260409091208651613aaf9288019061475f565b506001600160a01b03831615613b0457613ac883613c77565b613adc57613adc631a7387bd60e11b6131f6565b600081815260cc6020526040902080546001600160a01b0319166001600160a01b0385161790555b826001600160a01b031684827f7fe7f72f14a53255f3c9e225ab1d40fdb21335b87a7912726a196fb816866ae060405160405180910390a4949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000610e06836001600160a01b038416614133565b816001600160a01b0316836001600160a01b03161415613c095760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b6044820152606401610b1a565b6001600160a01b0383811660008181526101086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60006106fc6001600160a01b038316633b209e2f60e11b614117565b613c9e8484846134c2565b613caa84848484614226565b6122b15760405162461bcd60e51b8152600401610b1a90615dbf565b6001600160a01b03163b151590565b613ce08a8a8a61432f565b613cea868661440b565b613cf38461443c565b825160005b81811015613d4057613d2d858281518110613d1557613d1561545e565b602002602001015160c961385890919063ffffffff16565b5080613d38816154e4565b915050613cf8565b506001610136558751613d5b906101359060208b019061475f565b5060405162df38cb60e71b81526001600160a01b03831690636f9c658090613d87903090600401614938565b600060405180830381600087803b158015613da157600080fd5b505af1158015613db5573d6000803e3d6000fd5b505060d080546001600160a01b0319166001600160a01b039590951694909417909355505050505050505050505050565b60606000610e0683614485565b6000613dfe33611649565b15613e10575060131936013560601c90565b503390565b8060005260046000fd5b60009081526001919091016020526040902054151590565b6001600160a01b038216613e845760405162461bcd60e51b81526020600482015260146024820152734552433732313a207a65726f206164647265737360601b6044820152606401610b1a565b613e8d8161379c565b15613ed15760405162461bcd60e51b8152602060048201526014602482015273115490cdcc8c4e881d1bdad95b881b5a5b9d195960621b6044820152606401610b1a565b6001600160a01b038216600090815261010660205260408120805460019290613efb9084906154ff565b90915550506000818152610105602052604080822080546001600160a01b0319166001600160a01b0386169081179091559051839290600080516020615ee3833981519152908290a45050565b6000613f526131ec565b90506000613f5f836111c5565b90506001600160a01b03811615801590613fe857506040516301ffc9a760e01b81526001600160a01b038216906301ffc9a790613fa790637af46b4f60e11b90600401615595565b602060405180830381865afa158015613fc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fe89190615441565b1561406057604051637f1eaf8560e01b81526001600160a01b0383811660048301528681166024830152858116604483015260648201859052821690637f1eaf8590608401600060405180830381600087803b15801561404757600080fd5b505af115801561405b573d6000803e3d6000fd5b505050505b60d0546040516323de665160e01b81526001600160a01b03909116906323de665190614094908890889088906004016155aa565b600060405180830381600087803b1580156140ae57600080fd5b505af11580156140c2573d6000803e3d6000fd5b505050505050505050565b60006140d98383613e1f565b61410f575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106fc565b5060006106fc565b6000614122836144e0565b8015610e065750610e068383614513565b6000818152600183016020526040812054801561421c576000614157600183615d67565b855490915060009061416b90600190615d67565b90508181146141d057600086600001828154811061418b5761418b61545e565b90600052602060002001549050808760000184815481106141ae576141ae61545e565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806141e1576141e1615df1565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506106fc565b60009150506106fc565b600061423a846001600160a01b0316613cc6565b1561432757836001600160a01b031663150b7a026142566131ec565b8786866040518563ffffffff1660e01b81526004016142789493929190615e07565b6020604051808303816000875af19250505080156142b3575060408051601f3d908101601f191682019092526142b091810190615e3a565b60015b61430d573d8080156142e1576040519150601f19603f3d011682016040523d82523d6000602084013e6142e6565b606091505b5080516143055760405162461bcd60e51b8152600401610b1a90615dbf565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611f2c565b506001611f2c565b600054610100900460ff166143565760405162461bcd60e51b8152600401610b1a90615e57565b602082015161271061ffff8216111561437957614379633daf741f60e21b6131f6565b6143816145a7565b6143896145d6565b61439284613b44565b82516001600160a01b0316156143d957825160cd8054602086015161ffff16600160a01b026001600160b01b03199091166001600160a01b03909316929092179190911790555b6001600160a01b038216156122b15760cb80546001600160a01b0384166001600160a01b031990911617905550505050565b600054610100900460ff166144325760405162461bcd60e51b8152600401610b1a90615e57565b6114a58282614605565b600054610100900460ff166144635760405162461bcd60e51b8152600401610b1a90615e57565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b606081600001805480602002602001604051908101604052809291908181526020018280548015610fd857602002820191906000526020600020905b8154815260200190600101908083116144c15750505050509050919050565b60006144f3826301ffc9a760e01b614513565b80156106fc575061450c826001600160e01b0319614513565b1592915050565b6000806301ffc9a760e01b8360405160240161452f9190615595565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000806000602060008551602087018a617530fa92503d91506000519050828015614590575060208210155b801561459c5750600081115b979650505050505050565b600054610100900460ff166145ce5760405162461bcd60e51b8152600401610b1a90615e57565b6107c0614655565b600054610100900460ff166145fd5760405162461bcd60e51b8152600401610b1a90615e57565b6107c061468c565b600054610100900460ff1661462c5760405162461bcd60e51b8152600401610b1a90615e57565b81516146409061010390602085019061475f565b508051610bcd9061010490602084019061475f565b600054610100900460ff1661467c5760405162461bcd60e51b8152600401610b1a90615e57565b6107c06146876131ec565b613b44565b600054610100900460ff166131e55760405162461bcd60e51b8152600401610b1a90615e57565b8280546146bf90615499565b90600052602060002090601f0160209004810192826146e15760008555614727565b82601f106146fa5782800160ff19823516178555614727565b82800160010185558215614727579182015b8281111561472757823582559160200191906001019061470c565b506147339291506147d3565b5090565b6040518060800160405280606081526020016000815260200160008152602001600081525090565b82805461476b90615499565b90600052602060002090601f01602090048101928261478d5760008555614727565b82601f106147a657805160ff1916838001178555614727565b82800160010185558215614727579182015b828111156147275782518255916020019190600101906147b8565b5b8082111561473357600081556001016147d4565b6001600160e01b0319811681146111c257600080fd5b60006020828403121561481057600080fd5b8135610e06816147e8565b60008083601f84011261482d57600080fd5b5081356001600160401b0381111561484457600080fd5b602083019150836020828501011115610d1e57600080fd5b60008060006040848603121561487157600080fd5b8335925060208401356001600160401b0381111561488e57600080fd5b61489a8682870161481b565b9497909650939450505050565b60005b838110156148c25781810151838201526020016148aa565b838111156122b15750506000910152565b600081518084526148eb8160208601602086016148a7565b601f01601f19169290920160200192915050565b602081526000610e0660208301846148d3565b60006020828403121561492457600080fd5b5035919050565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b6001600160a01b03811681146111c257600080fd5b6000806040838503121561497457600080fd5b823561497f8161494c565b946020939093013593505050565b60008083601f84011261499f57600080fd5b5081356001600160401b038111156149b657600080fd5b6020830191508360208260051b8501011115610d1e57600080fd5b600080602083850312156149e457600080fd5b82356001600160401b038111156149fa57600080fd5b614a068582860161498d565b90969095509350505050565b6000815160808452614a2760808501826148d3565b90506020830151602085015260408301516040850152606083015160608501528091505092915050565b600081518084526020808501808196508360051b8101915082860160005b85811015614a99578284038952614a878483516148d3565b98850198935090840190600101614a6f565b5091979650505050505050565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b83811015614afd57605f19888703018552614aeb868351614a12565b95509382019390820190600101614acf565b505085840381870152505050614b138185614a51565b95945050505050565b600080600060608486031215614b3157600080fd5b833592506020840135614b438161494c565b929592945050506040919091013590565b600080600060608486031215614b6957600080fd5b8335614b748161494c565b92506020840135614b438161494c565b60008060408385031215614b9757600080fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b60008060008060008060608789031215614bd857600080fd5b86356001600160401b0380821115614bef57600080fd5b614bfb8a838b0161481b565b90985096506020890135915080821115614c1457600080fd5b614c208a838b0161481b565b90965094506040890135915080821115614c3957600080fd5b50614c4689828a0161481b565b979a9699509497509295939492505050565b600060208284031215614c6a57600080fd5b8135610e068161494c565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614cb357614cb3614c75565b604052919050565b60006001600160401b03821115614cd457614cd4614c75565b5060051b60200190565b600082601f830112614cef57600080fd5b81356020614d04614cff83614cbb565b614c8b565b82815260059290921b84018101918181019086841115614d2357600080fd5b8286015b84811015614d47578035614d3a8161494c565b8352918301918301614d27565b509695505050505050565b600080600060608486031215614d6757600080fd5b8335925060208401356001600160401b03811115614d8457600080fd5b614d9086828701614cde565b925050604084013590509250925092565b60006001600160401b03821115614dba57614dba614c75565b50601f01601f191660200190565b600082601f830112614dd957600080fd5b8135614de7614cff82614da1565b818152846020838601011115614dfc57600080fd5b816020850160208301376000918101602001919091529392505050565b61ffff811681146111c257600080fd5b600060408284031215614e3b57600080fd5b604080519081016001600160401b0381118282101715614e5d57614e5d614c75565b6040529050808235614e6e8161494c565b81526020830135614e7e81614e19565b6020919091015292915050565b60008060008060008060008060e0898b031215614ea757600080fd5b88356001600160401b0380821115614ebe57600080fd5b614eca8c838d01614dc8565b995060208b0135985060408b01359150614ee38261494c565b819750614ef38c60608d01614e29565b965060a08b0135915080821115614f0957600080fd5b614f158c838d0161481b565b909650945060c08b0135915080821115614f2e57600080fd5b50614f3b8b828c0161481b565b999c989b5096995094979396929594505050565b600081518084526020808501945080840160005b83811015614f7f57815187529582019590820190600101614f63565b509495945050505050565b602081526000610e066020830184614f4f565b60008060008060008060c08789031215614fb657600080fd5b86356001600160401b0380821115614fcd57600080fd5b614fd98a838b01614dc8565b97506020890135965060408901359150614ff28261494c565b8195506150028a60608b01614e29565b945060a0890135915080821115614c3957600080fd5b6000806040838503121561502b57600080fd5b8235915060208301356001600160401b0381111561504857600080fd5b61377785828601614cde565b60008060008060a0858703121561506a57600080fd5b84356001600160401b038082111561508157600080fd5b61508d88838901614dc8565b955060208701359150808211156150a357600080fd5b506150b087828801614dc8565b93505060408501356150c18161494c565b91506150d08660608701614e29565b905092959194509250565b80151581146111c257600080fd5b600080604083850312156150fc57600080fd5b82356151078161494c565b91506020830135615117816150db565b809150509250929050565b6000806040838503121561513557600080fd5b8235915060208301356151178161494c565b6000806000806080858703121561515d57600080fd5b84356151688161494c565b935060208501356151788161494c565b92506040850135915060608501356001600160401b0381111561519a57600080fd5b6151a687828801614dc8565b91505092959194509250565b600080600080604085870312156151c857600080fd5b84356001600160401b03808211156151df57600080fd5b6151eb8883890161498d565b9096509450602087013591508082111561520457600080fd5b818701915087601f83011261521857600080fd5b81358181111561522757600080fd5b8860208260061b850101111561523c57600080fd5b95989497505060200194505050565b6000806040838503121561525e57600080fd5b82356152698161494c565b915060208301356001600160401b0381111561528457600080fd5b61377785828601614dc8565b602081526000610e066020830184614a12565b600080604083850312156152b657600080fd5b82356152c18161494c565b915060208301356151178161494c565b600080600080604085870312156152e757600080fd5b84356001600160401b03808211156152fe57600080fd5b61530a8883890161498d565b9096509450602087013591508082111561532357600080fd5b506153308782880161498d565b95989497509550505050565b600060408284031215610d7357600080fd5b6020808252825182820181905260009190848201906040850190845b8181101561538f5783516001600160a01b03168352928401929184019160010161536a565b50909695505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b038781168252861660208201526040810185905260a06060820181905260009061540e908301858761539b565b905060078310615420576154206153c4565b826080830152979650505050505050565b805161543c816150db565b919050565b60006020828403121561545357600080fd5b8151610e06816150db565b634e487b7160e01b600052603260045260246000fd5b6040815260006154876040830185614f4f565b8281036020840152614b138185614a51565b600181811c908216806154ad57607f821691505b60208210811415610d7357634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156154f8576154f86154ce565b5060010190565b60008219821115615512576155126154ce565b500190565b6020808252601b908201527a115490cdcc8c4e8818d85b1b195c881d5b985d5d1a1bdc9a5e9959602a1b604082015260600190565b60608152600061556060608301888a61539b565b828103602084015261557381878961539b565b9050828103604084015261558881858761539b565b9998505050505050505050565b6001600160e01b031991909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b039290921682521515602082015260400190565b81835260006001600160fb1b0383111561560257600080fd5b8260051b8083602087013760009401602001938452509192915050565b602081526000611f2c6020830184866155e9565b803565ffffffffffff8116811461543c57600080fd5b60008060008060008060008060006101208a8c03121561566857600080fd5b89356156738161494c565b985060208a01356156838161494c565b975061569160408b01615633565b965061569f60608b01615633565b955060808a01356001600160c01b03811681146156bb57600080fd5b94506156c960a08b01615633565b93506156d760c08b01615633565b92506156e560e08b01615633565b91506101008a01356156f68161494c565b809150509295985092959850929598565b65ffffffffffff169052565b60006101c08201905061572782845161492b565b60208301516157396020840182615707565b50604083015161574c6040840182615707565b50606083015161575f606084018261492b565b5060808301516157726080840182615707565b5060a083015161578560a0840182615707565b5060c083015161579860c084018261492b565b5060e08301516157ab60e0840182615707565b50610100808401516157bf82850182615707565b5050610120838101516001600160c01b031690830152610140808401516157e882850182615707565b505061016083810151151590830152610180808401511515908301526101a092830151929091019190915290565b6000806000806080858703121561582c57600080fd5b84356001600160601b038116811461584357600080fd5b935060208501356158538161494c565b925060408501356158638161494c565b915060608501356001600160401b0381111561519a57600080fd5b83516001600160a01b0390811682526020808601516001600160601b0316908301526040808601519091169082015260608085015115159082015260808085015115159082015260a08481015115159082015260006101006158eb60c08401866001600160601b03169052565b8060e0840152611d04818401856148d3565b805161543c8161494c565b600080600080600060a0868803121561592057600080fd5b855161592b8161494c565b6020870151604088015191965094506159438161494c565b60608701519093506159548161494c565b80925050608086015190509295509295909350565b60048110615979576159796153c4565b9052565b60006101408201905084825260018060a01b038085511660208401528060208601511660408401528060408601511660608401525060608401516159c4608084018261492b565b50608084015160a083015260a084015160c083015260c08401516159ec60e084018215159052565b5060e0840151615a00610100840182615969565b5082610120830152949350505050565b6001600160a01b0393841681526020810192909252909116604082015260600190565b600060208284031215615a4557600080fd5b8135610e0681614e19565b8135615a5b8161494c565b81546001600160a01b031981166001600160a01b039290921691821783556020840135615a8781614e19565b6001600160b01b03199190911690911760a09190911b61ffff60a01b1617905550565b8035615ab58161494c565b6001600160a01b031682526020810135615ace81614e19565b61ffff81166020840152505050565b83815260808101615af16020830185615aaa565b6001600160a01b03929092166060919091015292915050565b60006040808352615b1e81840187896155e9565b83810360208086019190915285825286910160005b86811015615b5557615b458284615aaa565b9183019190830190600101615b33565b5098975050505050505050565b600082601f830112615b7357600080fd5b8151615b81614cff82614da1565b818152846020838601011115615b9657600080fd5b611f2c8260208301602087016148a7565b600082601f830112615bb857600080fd5b81516020615bc8614cff83614cbb565b82815260059290921b84018101918181019086841115615be757600080fd5b8286015b84811015614d47578051615bfe8161494c565b8352918301918301615beb565b600080600080600080600060e0888a031215615c2657600080fd5b87516001600160401b0380821115615c3d57600080fd5b615c498b838c01615b62565b985060208a0151915080821115615c5f57600080fd5b615c6b8b838c01615b62565b975060408a0151915080821115615c8157600080fd5b615c8d8b838c01615b62565b9650615c9b60608b016158fd565b955060808a0151915080821115615cb157600080fd5b50615cbe8a828b01615ba7565b935050615ccd60a08901615431565b9150615cdb60c089016158fd565b905092959891949750929550565b604081526000615cfd6040830186886155e9565b8281036020848101919091528482528591810160005b86811015615b55578335615d268161494c565b6001600160a01b031682529282019290820190600101615d13565b60608101615d4f8285615aaa565b6001600160a01b039290921660409190910152919050565b600082821015615d7957615d796154ce565b500390565b6000816000190483118215151615615d9857615d986154ce565b500290565b600082615dba57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526018908201527722a9219b99189d1034b73b30b634b2103932b1b2b4bb32b960411b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611d04908301846148d3565b600060208284031215615e4c57600080fd5b8151610e06816147e8565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fec407dfe559ca4a63d7cf8439b9fce2965d7a4c8c92eb5d5047f53bb9eec295fd73e05f4c0a27cbf60841afa4a2f8577f5e99db3e3e9c293800d6e6b1f7b8a7abddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efe236d251e7da4ac8a3c275f80aebc9b74cbf356425fa04864da5043511a81219a164736f6c634300080a000a