[ { "inputs": [ { "internalType": "bool", "name": "disable", "type": "bool" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AirdropTooFewAddresses", "type": "error" }, { "inputs": [], "name": "BatchSizeTooSmall", "type": "error" }, { "inputs": [], "name": "CallerNotApprovedOrOwner", "type": "error" }, { "inputs": [], "name": "CallerNotTokenOwnerOrDelegate", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721IncorrectOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721InsufficientApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC721InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC721InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721InvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC721InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC721InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721NonexistentToken", "type": "error" }, { "inputs": [], "name": "EmptyTokenURI", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "MaxRoyaltyError", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "NoTokenUriUpdateAvailable", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "NotRoleOrOwner", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "NotSpecifiedRole", "type": "error" }, { "inputs": [], "name": "OperatorBlocked", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "StoryNotEnabled", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "StringsInsufficientHexLength", "type": "error" }, { "inputs": [], "name": "TokenDoesntExist", "type": "error" }, { "inputs": [], "name": "ZeroAddressError", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" } ], "name": "AllRolesRevoked", "type": "event" }, { "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": false, "internalType": "uint256", "name": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "prevBlockListRegistry", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newBlockListRegistry", "type": "address" } ], "name": "BlockListRegistryUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "creatorAddress", "type": "address" }, { "indexed": false, "internalType": "string", "name": "creatorName", "type": "string" }, { "indexed": false, "internalType": "string", "name": "story", "type": "string" } ], "name": "CollectionStory", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "creatorAddress", "type": "address" }, { "indexed": false, "internalType": "string", "name": "creatorName", "type": "string" }, { "indexed": false, "internalType": "string", "name": "story", "type": "string" } ], "name": "CreatorStory", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "newPercentage", "type": "uint256" } ], "name": "DefaultRoyaltyUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "prevNftDelegationRegistry", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newNftDelegationRegistry", "type": "address" } ], "name": "NftDelegationRegistryUpdate", "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": "user", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "approved", "type": "bool" }, { "indexed": false, "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "RoleChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "collectorAddress", "type": "address" }, { "indexed": false, "internalType": "string", "name": "collectorName", "type": "string" }, { "indexed": false, "internalType": "string", "name": "story", "type": "string" } ], "name": "Story", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "status", "type": "bool" } ], "name": "StoryStatusUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "enum ISynergy.SynergyAction", "name": "action", "type": "uint8" }, { "indexed": false, "internalType": "string", "name": "uri", "type": "string" } ], "name": "SynergyStatusChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "newRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "newPercentage", "type": "uint256" } ], "name": "TokenRoyaltyOverride", "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": [], "name": "ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "APPROVED_MINT_CONTRACT", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "BASIS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "acceptTokenUriUpdate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "", "type": "string" }, { "internalType": "string", "name": "story", "type": "string" } ], "name": "addCollectionStory", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "", "type": "string" }, { "internalType": "string", "name": "story", "type": "string" } ], "name": "addCreatorStory", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "", "type": "string" }, { "internalType": "string", "name": "story", "type": "string" } ], "name": "addStory", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "addresses", "type": "address[]" }, { "internalType": "string", "name": "baseUri", "type": "string" } ], "name": "airdrop", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint128", "name": "numTokens", "type": "uint128" }, { "internalType": "string", "name": "baseUri", "type": "string" } ], "name": "batchMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "blocklistRegistry", "outputs": [ { "internalType": "contract IBlockListRegistry", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "externalMint", "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": "getDefaultRoyaltyRecipientAndPercentage", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMembers", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "potentialRoleMember", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "string", "name": "personalization", "type": "string" }, { "internalType": "address", "name": "defaultRoyaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "defaultRoyaltyPercentage", "type": "uint256" }, { "internalType": "address", "name": "initOwner", "type": "address" }, { "internalType": "address[]", "name": "admins", "type": "address[]" }, { "internalType": "bool", "name": "enableStory", "type": "bool" }, { "internalType": "address", "name": "initBlockListRegistry", "type": "address" }, { "internalType": "address", "name": "initNftDelegationRegistry", "type": "address" } ], "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": "recipient", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "address", "name": "royaltyAddress", "type": "address" }, { "internalType": "uint256", "name": "royaltyPercent", "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": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "newUri", "type": "string" } ], "name": "proposeNewTokenUri", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "rejectTokenUriUpdate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "revokeAllRoles", "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": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "minters", "type": "address[]" }, { "internalType": "bool", "name": "status", "type": "bool" } ], "name": "setApprovedMintContracts", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newBlockListRegistry", "type": "address" } ], "name": "setBlockListRegistry", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newRecipient", "type": "address" }, { "internalType": "uint256", "name": "newPercentage", "type": "uint256" } ], "name": "setDefaultRoyalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newNftDelegationRegistry", "type": "address" } ], "name": "setNftDelegationRegistry", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address[]", "name": "roleMembers", "type": "address[]" }, { "internalType": "bool", "name": "status", "type": "bool" } ], "name": "setRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "status", "type": "bool" } ], "name": "setStoryStatus", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "newRecipient", "type": "address" }, { "internalType": "uint256", "name": "newPercentage", "type": "uint256" } ], "name": "setTokenRoyalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "storyEnabled", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "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": [], "name": "tlNftDelegationRegistry", "outputs": [ { "internalType": "contract ITLNftDelegationRegistry", "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" } ]
60806040523480156200001157600080fd5b50604051620058a3380380620058a3833981016040819052620000349162000100565b80156200004557620000456200004c565b506200012b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156200009d5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000fd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6000602082840312156200011357600080fd5b815180151581146200012457600080fd5b9392505050565b615768806200013b6000396000f3fe608060405234801561001057600080fd5b50600436106103365760003560e01c8063715018a6116101b2578063b3400ca8116100f9578063d8d045b4116100a2578063e985e9c51161007c578063e985e9c5146107cc578063ec85a37e14610827578063f2fde38b1461083a578063ffa1ad741461084d57600080fd5b8063d8d045b414610793578063da14cbbc146107a6578063dad83ed9146107b957600080fd5b8063c87b56dd116100d3578063c87b56dd1461075a578063d0def5211461076d578063d4bf502a1461078057600080fd5b8063b3400ca81461071c578063b88d4fde1461072f578063bbe4e87b1461074257600080fd5b806391d148541161015b5780639c22fcbb116101355780639c22fcbb146106d6578063a22cb465146106e9578063a3246ad3146106fc57600080fd5b806391d148541461063857806395d89b41146106bb5780639713c807146106c357600080fd5b80637e6cc5421161018c5780637e6cc542146105a05780638bb9c5bf146105f55780638da5cb5b1461060857600080fd5b8063715018a61461055e57806375b238fc146105665780637c5d28bd1461058d57600080fd5b806339ae37c01161028157806356000f771161022a5780636352211e116102045780636352211e1461051257806365a20935146105255780636c6ad2421461053857806370a082311461054b57600080fd5b806356000f77146104d95780635771ee77146104ec5780635b23e3ce146104ff57600080fd5b80634a5970651161025b5780634a597065146104b057806351dc02f2146104bd578063528cfa98146104d057600080fd5b806339ae37c01461047757806342842e0e1461048a57806342966c681461049d57600080fd5b80631a006e8a116102e357806329471dc2116102bd57806329471dc21461042a5780632a55205a1461043d57806333aa4fb31461046f57600080fd5b80631a006e8a146103dd5780631ff7f0bc146103f057806323b872dd1461041757600080fd5b8063095ea7b311610314578063095ea7b3146103a35780631145a243146103b857806318160ddd146103cb57600080fd5b806301ffc9a71461033b57806306fdde0314610363578063081812fc14610378575b600080fd5b61034e6103493660046148f4565b610889565b60405190151581526020015b60405180910390f35b61036b610a71565b60405161035a9190614961565b61038b610386366004614974565b610b27565b6040516001600160a01b03909116815260200161035a565b6103b66103b13660046149a4565b610b6f565b005b60025461038b906001600160a01b031681565b6000545b60405190815260200161035a565b6103b66103eb3660046149ce565b610bbd565b6103cf7ff0178e81e3689af48153edf0e1b2d669fe2786ab9e21fdecf3e3771c70330af581565b6103b66104253660046149e9565b610d1f565b6103b6610438366004614a67565b610ddc565b61045061044b366004614ad3565b610f17565b604080516001600160a01b03909316835260208301919091520161035a565b6103b6610ff2565b6103b6610485366004614b3a565b61105c565b6103b66104983660046149e9565b61133e565b6103b66104ab366004614974565b61135e565b60015461034e9060ff1681565b6103b66104cb366004614b8d565b6113ef565b6103cf61271081565b6103b66104e7366004614be4565b61153e565b6103b66104fa366004614974565b6116ba565b6103b661050d366004614be4565b611829565b61038b610520366004614974565b6118f0565b6103b6610533366004614974565b6118fb565b6103b6610546366004614c5e565b611aad565b6103cf6105593660046149ce565b611be5565b6103b6611c6c565b6103cf7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6103b661059b366004614cb1565b611c80565b6104507fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee70700547fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee70701546001600160a01b0390911691565b6103b6610603366004614974565b611dce565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661038b565b61034e610646366004614cce565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083209483529381528382206001600160a01b0393909316825291909152205460ff1690565b61036b611e30565b6103b66106d1366004614cfa565b611e81565b6103b66106e43660046149ce565b611f7c565b6103b66106f7366004614d1f565b6120e0565b61070f61070a366004614974565b612130565b60405161035a9190614d56565b6103b661072a366004614da3565b61219f565b6103b661073d366004614e8e565b612403565b60015461038b9061010090046001600160a01b031681565b61036b610768366004614974565b61241a565b6103b661077b366004614c5e565b61250e565b6103b661078e366004614f91565b6125fe565b6103b66107a13660046149a4565b612611565b6103b66107b4366004614fe1565b61270b565b6103b66107c736600461504e565b612886565b61034e6107da3660046150ba565b6001600160a01b0391821660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793056020908152604080832093909416825291909152205460ff1690565b6103b6610835366004615104565b612c27565b6103b66108483660046149ce565b612f7a565b61036b6040518060400160405280600581526020017f332e312e3000000000000000000000000000000000000000000000000000000081525081565b600061089482612fd1565b806108a357506108a3826130b4565b806108ef57507f49064906000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061093b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f1c8e024d00000000000000000000000000000000000000000000000000000000145b8061098757507fffffffff0000000000000000000000000000000000000000000000000000000082167f8193ebea00000000000000000000000000000000000000000000000000000000145b806109d357507fffffffff0000000000000000000000000000000000000000000000000000000082167f2464f17b00000000000000000000000000000000000000000000000000000000145b80610a1f57507f0d23ecb9000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b80610a6b57507fffffffff0000000000000000000000000000000000000000000000000000000082167fc74089ae00000000000000000000000000000000000000000000000000000000145b92915050565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793008054606091908190610aa390615210565b80601f0160208091040260200160405190810160405280929190818152602001828054610acf90615210565b8015610b1c5780601f10610af157610100808354040283529160200191610b1c565b820191906000526020600020905b815481529060010190602001808311610aff57829003601f168201915b505050505091505090565b6000610b328261314b565b5060008281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930460205260409020546001600160a01b0316610a6b565b610b788261319c565b15610baf576040517f30aaa1db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bb98282613243565b5050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015610c8c575033610c807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15610cb2576040516376c1743160e01b8152600481018290526024015b60405180910390fd5b600280546001600160a01b038481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169190829033907f6d65d584292e445b64ea5cb6c8d589521aa512572ea6b91ea96e93846ae20aa590600090a4505050565b6001600160a01b038216610d62576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260006004820152602401610ca9565b6000610d6f83833361324e565b9050836001600160a01b0316816001600160a01b031614610dd6576040517f64283d7b0000000000000000000000000000000000000000000000000000000081526001600160a01b0380861660048301526024820184905282166044820152606401610ca9565b50505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015610eab575033610e9f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15610ecc576040516376c1743160e01b815260048101829052602401610ca9565b337f2e88f428bf841b9abdc4c8d098cebae9a254b846c942a7fe0abf4963cf91ed96610ef782613382565b8585604051610f0893929190615288565b60405180910390a25050505050565b7fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee7070080547fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee707015460008581527fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee7070260205260408120549093849390926001600160a01b039182169290911615610fcb5750506000858152600282016020526040902080546001909101546001600160a01b03909116905b81612710610fd983896152e7565b610fe391906152fe565b945094505050505b9250929050565b610ffa613398565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e300805481600061102983615339565b909155505060405133907fdf1eaea754aea6dc7d083377ed7366dd7405e3fb0f16ddfb9448770520e4427990600090a250565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff1615801561112b57503361111f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b1561114c576040516376c1743160e01b815260048101829052602401610ca9565b6000829003611187576040517f17314b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028410156111c2576040517f8015753900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546111d1906001615353565b9050600060016111e18784615353565b6111eb9190615366565b9050868690506000808282546112019190615353565b925050819055506006604051806080016040528060006001600160a01b0316815260200184815260200183815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050835460018082018655948252602091829020845160049092020180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0390921691909117815590830151938101939093555060408101516002830155606081015190919060038201906112e590826153c1565b50505060005b868110156113345761132c88888381811061130857611308615481565b905060200201602081019061131d91906149ce565b6113278386615353565b61340c565b6001016112eb565b5050505050505050565b61135983838360405180602001604052806000815250612403565b505050565b6000611369826118f0565b90506113768133846134a3565b6113ac576040517fc9c1cf1b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b582613564565b50600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff161580156114be5750336114b27f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b156114df576040516376c1743160e01b815260048101829052602401610ca9565b610dd67ff0178e81e3689af48153edf0e1b2d669fe2786ab9e21fdecf3e3771c70330af58585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508792506135b8915050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff1615801561160d5750336116017f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b1561162e576040516376c1743160e01b815260048101829052602401610ca9565b61163786613764565b61166d576040517feb7d192800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33867f5c0564b4237730adb947143019acb5addfdbf1be3ad1edf72e24a8f9d02fd2c161169983613382565b86866040516116aa93929190615288565b60405180910390a3505050505050565b6116c381613781565b6116f9576040517fd230415400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600460205260408120805461171290615210565b80601f016020809104026020016040519081016040528092919081815260200182805461173e90615210565b801561178b5780601f106117605761010080835404028352916020019161178b565b820191906000526020600020905b81548152906001019060200180831161176e57829003601f168201915b5050505050905080516000036117cd576040517f863027cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526004602052604081206117e491614878565b6002604080516020808252600090820152849133917f150eb29d770d531a41e193b95d5b3ee85bf5d788969e59bcc83c5e28eec0214791015b60405180910390a45050565b60015460ff16611865576040517fc3d4cd7900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61186e85613781565b6118a4576040517fd230415400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33857f40ebea9c3c7603a5d233a0bec01e483338737b6bed01bed2ac09ccbaa3d4b7ac6118d083613382565b85856040516118e193929190615288565b60405180910390a35050505050565b6000610a6b8261314b565b61190481613781565b61193a576040517fd230415400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600460205260408120805461195390615210565b80601f016020809104026020016040519081016040528092919081815260200182805461197f90615210565b80156119cc5780601f106119a1576101008083540402835291602001916119cc565b820191906000526020600020905b8154815290600101906020018083116119af57829003601f168201915b505050505090508051600003611a0e576040517f863027cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600560205260409020611a2682826153c1565b506000828152600460205260408120611a3e91614878565b6040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a1600182336001600160a01b03167f150eb29d770d531a41e193b95d5b3ee85bf5d788969e59bcc83c5e28eec021478460405161181d9190614961565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207ff0178e81e3689af48153edf0e1b2d669fe2786ab9e21fdecf3e3771c70330af58085529083528184203385529092529091205460ff16611b6f576040517fee074e7400000000000000000000000000000000000000000000000000000000815260048101829052602401610ca9565b6000829003611baa576040517f17314b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080549080611bb983615339565b9091555050600080548152600560205260409020611bd88385836154b0565b50610dd68460005461340c565b60007f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793006001600160a01b038316611c4b576040517f89c62b6400000000000000000000000000000000000000000000000000000000815260006004820152602401610ca9565b6001600160a01b039092166000908152600390920160205250604090205490565b611c74613398565b611c7e600061386c565b565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015611d4f575033611d437f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15611d70576040516376c1743160e01b815260048101829052602401610ca9565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001683151590811790915560405133907f558a671a281f60a95ebbb675ce350bcef6b95e9c06674b651786076773f6ae1990600090a35050565b604080516001808252818301909252600091602080830190803683370190505090503381600081518110611e0457611e04615481565b60200260200101906001600160a01b031690816001600160a01b031681525050610bb9828260006135b8565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930180546060917f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930091610aa390615210565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff16158015611f50575033611f447f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15611f71576040516376c1743160e01b815260048101829052602401610ca9565b610dd68484846138f5565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff1615801561204b57503361203f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b1561206c576040516376c1743160e01b815260048101829052602401610ca9565b600180546001600160a01b038481166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff851617909455604051939092041691829033907f741ffc7ad72eee12c151d25e52a967a1addf58aca8ed670dcad256c12d64bb8190600090a4505050565b8015612126576120ef8261319c565b15612126576040517f30aaa1db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bb98282613a22565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e300805460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3026020908152604080832085845290915290206060919061219890613a2d565b9392505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff1615801561226e5750336122627f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b1561228f576040516376c1743160e01b815260048101829052602401610ca9565b61229884613764565b6122ce576040517feb7d192800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000829003612309576040517f17314b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661233d85613a3a565b6001600160a01b03160361239d5760008481526005602052604090206123648385836154b0565b506040518481527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a1610dd6565b60008481526004602052604090206123b68385836154b0565b50600084336001600160a01b03167f150eb29d770d531a41e193b95d5b3ee85bf5d788969e59bcc83c5e28eec0214786866040516123f5929190615570565b60405180910390a450505050565b61240e848484610d1f565b610dd684848484613ac5565b606061242582613764565b61245b576040517feb7d192800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600560205260408120805461247490615210565b80601f01602080910402602001604051908101604052809291908181526020018280546124a090615210565b80156124ed5780601f106124c2576101008083540402835291602001916124ed565b820191906000526020600020905b8154815290600101906020018083116124d057829003601f168201915b505050505090508051600003610a6b5761250683613c63565b949350505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff161580156125dd5750336125d17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15611b6f576040516376c1743160e01b815260048101829052602401610ca9565b612606613398565b6113598383836135b8565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff161580156126e05750336126d47f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15612701576040516376c1743160e01b815260048101829052602401610ca9565b6113598383613db4565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff161580156127da5750336127ce7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b156127fb576040516376c1743160e01b815260048101829052602401610ca9565b6000849003612836576040517f17314b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054908061284583615339565b90915550506000805481526005602052604090206128648587836154b0565b5061287260005484846138f5565b61287e8660005461340c565b505050505050565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e3005460009081527f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e301602090815260408083207fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758085529083528184203385529092529091205460ff161580156129555750336129497f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614155b15612976576040516376c1743160e01b815260048101829052602401610ca9565b6001600160a01b0385166129b6576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008290036129f1576040517f17314b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002846fffffffffffffffffffffffffffffffff161015612a3e576040517f26ce41c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054612a4d906001615353565b905060006001612a6f6fffffffffffffffffffffffffffffffff881684615353565b612a799190615366565b9050856fffffffffffffffffffffffffffffffff16600080828254612a9e9190615353565b9250508190555060066040518060800160405280896001600160a01b0316815260200184815260200183815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050835460018082018655948252602091829020845160049092020180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039092169190911781559083015193810193909355506040810151600283015560608101519091906003820190612b8190826153c1565b5050506001600160a01b03871660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793036020526040902080546fffffffffffffffffffffffffffffffff8816019055815b612be0826001615353565b8110156113345760405181906001600160a01b038a16906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4600101612bd5565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015612c725750825b905060008267ffffffffffffffff166001148015612c8f5750303b155b905081158015612c9d575080155b15612cd4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315612d355784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b612d3f8f8f613ecb565b612d498c8c613edd565b612d528a613eef565b612d7e7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758a60016135b8565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168915159081179091556040516001600160a01b038c16907f558a671a281f60a95ebbb675ce350bcef6b95e9c06674b651786076773f6ae1990600090a3600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038981169182179092556040519091600091908d16907f6d65d584292e445b64ea5cb6c8d589521aa512572ea6b91ea96e93846ae20aa5908390a4600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03898116918202929092179092556040516000918d16907f741ffc7ad72eee12c151d25e52a967a1addf58aca8ed670dcad256c12d64bb81908390a48c5115612f08576001600160a01b038a167f2e88f428bf841b9abdc4c8d098cebae9a254b846c942a7fe0abf4963cf91ed96612ef082613382565b8f604051612eff929190615584565b60405180910390a25b8315612f695784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050505050565b612f82613398565b6001600160a01b038116612fc5576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610ca9565b612fce8161386c565b50565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061306457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610a6b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610a6b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a000000000000000000000000000000000000000000000000000000001480610a6b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610a6b565b60008061315783613a3a565b90506001600160a01b038116610a6b576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101849052602401610ca9565b6002546000906001600160a01b03166131b757506000919050565b6002546040517f334980a50000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063334980a590602401602060405180830381865afa15801561321a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b91906155b2565b919050565b610bb9828233613f08565b60007f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793008161327b85613a3a565b90506001600160a01b0384161561329757613297818587613f15565b6001600160a01b038116156132d7576132b4600086600080613fab565b6001600160a01b0381166000908152600383016020526040902080546000190190555b6001600160a01b03861615613308576001600160a01b03861660009081526003830160205260409020805460010190555b600085815260028301602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a811691821790925591518893918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a495945050505050565b6060610a6b6001600160a01b0383166014614142565b336133ca7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614611c7e576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610ca9565b6001600160a01b03821661344f576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260006004820152602401610ca9565b600061345d8383600061324e565b90506001600160a01b03811615611359576040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260006004820152602401610ca9565b60006001600160a01b038316158015906125065750826001600160a01b0316846001600160a01b0316148061351c57506001600160a01b0380851660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079305602090815260408083209387168352929052205460ff165b8061250657505060009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930460205260409020546001600160a01b03908116911614919050565b6000613573600083600061324e565b90506001600160a01b038116610bb9576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101839052602401610ca9565b7f0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e30060005b835181101561375d578154600090815260018301602090815260408083208884529091528120855185929087908590811061361957613619615481565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555082156136a7576136a184828151811061367357613673615481565b6020908102919091018101518454600090815260028601835260408082208a83529093529190912090614360565b506136ec565b6136ea8482815181106136bc576136bc615481565b6020908102919091018101518454600090815260028601835260408082208a83529093529190912090614375565b505b82151584828151811061370157613701615481565b60200260200101516001600160a01b0316336001600160a01b03167fc9f6f69b3c19bd2b7eb8273129bbca5e3db0e3be63ca9903e140122a5bbb556e8860405161374d91815260200190565b60405180910390a46001016135dc565b5050505050565b60008061377083613a3a565b6001600160a01b0316141592915050565b60008061378d83613a3a565b90506001600160a01b03811633036137a85750600192915050565b60015461010090046001600160a01b03166137c65750600092915050565b6001546040517ff5eb12c20000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038381166024830152306044830152606482018690526101009092049091169063f5eb12c290608401602060405180830381865afa158015613842573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219891906155b2565b50919050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee707006001600160a01b038316613956576040517f3efa09af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612710821115613992576040517fdc65bdeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260028201602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038716908117825560019091018590558251908152908101849052859133917f3001fd4350a0a56b8c380c23b85aebc6fb22b32c98a314ba3aecc0bc23a1cf9091015b60405180910390a350505050565b610bb933838361438a565b606060006121988361447b565b60008181526003602052604081205460ff1615613a5957506000919050565b600082118015613a6b57506000548211155b15613abd5760008281527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab007930260205260409020546001600160a01b031680610a6b57613ab583613c63565b509392505050565b506000919050565b6001600160a01b0383163b15610dd6576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063150b7a0290613b209033908890879087906004016155cf565b6020604051808303816000875af1925050508015613b5b575060408051601f3d908101601f19168201909252613b5891810190615601565b60015b613bdd573d808015613b89576040519150601f19603f3d011682016040523d82523d6000602084013e613b8e565b606091505b508051600003613bd5576040517f64a0ae920000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610ca9565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a02000000000000000000000000000000000000000000000000000000001461375d576040517f64a0ae920000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610ca9565b6000606060005b600654811015613cd85760068181548110613c8757613c87615481565b9060005260206000209060040201600101548410158015613ccc575060068181548110613cb657613cb6615481565b9060005260206000209060040201600201548411155b613cd857600101613c6a565b6006548110613cfd576000604051806020016040528060008152509250925050915091565b600060068281548110613d1257613d12615481565b9060005260206000209060040201600301613d5b60068481548110613d3957613d39615481565b90600052602060002090600402016001015487613d569190615366565b6144d7565b604051602001613d6c92919061561e565b604051602081830303815290604052905060068281548110613d9057613d90615481565b60009182526020909120600490910201546001600160a01b03169590945092505050565b7fe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee707006001600160a01b038316613e15576040517f3efa09af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612710821115613e51576040517fdc65bdeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416908117825560018201839055604080519182526020820184905233917f37dd87932a16caf40cd3c1ba643a0336807c74041d8c93260524aca37878f010910160405180910390a2505050565b613ed3614577565b610bb982826145de565b613ee5614577565b610bb98282614621565b613ef7614577565b613f0081614633565b612fce614644565b6113598383836001613fab565b613f208383836134a3565b611359576001600160a01b038316613f67576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101829052602401610ca9565b6040517f177e802f0000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260248101829052604401610ca9565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793008180613fe057506001600160a01b03831615155b156140f9576000613ff08561314b565b90506001600160a01b0384161580159061401c5750836001600160a01b0316816001600160a01b031614155b801561406d57506001600160a01b0380821660009081527f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079305602090815260408083209388168352929052205460ff16155b156140af576040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610ca9565b82156140f75784866001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b600093845260040160205250506040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60608260006141528460026152e7565b61415d906002615353565b67ffffffffffffffff81111561417557614175614dd6565b6040519080825280601f01601f19166020018201604052801561419f576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106141d6576141d6615481565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061423957614239615481565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006142758560026152e7565b614280906001615353565b90505b600181111561431d577f303132333435363738396162636465660000000000000000000000000000000083600f16601081106142c1576142c1615481565b1a60f81b8282815181106142d7576142d7615481565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049290921c91614316816156ec565b9050614283565b508115612506576040517fe22e27eb0000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604401610ca9565b6000612198836001600160a01b03841661464c565b6000612198836001600160a01b03841661469b565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793006001600160a01b0383166143f6576040517f5b08ba180000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610ca9565b6001600160a01b03848116600081815260058401602090815260408083209488168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101613a14565b6060816000018054806020026020016040519081016040528092919081815260200182805480156144cb57602002820191906000526020600020905b8154815260200190600101908083116144b7575b50505050509050919050565b606060006144e48361478e565b600101905060008167ffffffffffffffff81111561450457614504614dd6565b6040519080825280601f01601f19166020018201604052801561452e576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461453857509392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c7e576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6145e6614577565b7f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab00793008061461284826153c1565b5060018101610dd683826153c1565b614629614577565b610bb98282613db4565b61463b614577565b612fce81614870565b611c7e614577565b600081815260018301602052604081205461469357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a6b565b506000610a6b565b600081815260018301602052604081205480156147845760006146bf600183615366565b85549091506000906146d390600190615366565b90508082146147385760008660000182815481106146f3576146f3615481565b906000526020600020015490508087600001848154811061471657614716615481565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061474957614749615703565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610a6b565b6000915050610a6b565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106147d7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310614803576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061482157662386f26fc10000830492506010015b6305f5e1008310614839576305f5e100830492506008015b612710831061484d57612710830492506004015b6064831061485f576064830492506002015b600a8310610a6b5760010192915050565b612f82614577565b50805461488490615210565b6000825580601f10614894575050565b601f016020900490600052602060002090810190612fce91905b808211156148c257600081556001016148ae565b5090565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114612fce57600080fd5b60006020828403121561490657600080fd5b8135612198816148c6565b60005b8381101561492c578181015183820152602001614914565b50506000910152565b6000815180845261494d816020860160208601614911565b601f01601f19169290920160200192915050565b6020815260006121986020830184614935565b60006020828403121561498657600080fd5b5035919050565b80356001600160a01b038116811461323e57600080fd5b600080604083850312156149b757600080fd5b6149c08361498d565b946020939093013593505050565b6000602082840312156149e057600080fd5b6121988261498d565b6000806000606084860312156149fe57600080fd5b614a078461498d565b9250614a156020850161498d565b9150604084013590509250925092565b60008083601f840112614a3757600080fd5b50813567ffffffffffffffff811115614a4f57600080fd5b602083019150836020828501011115610feb57600080fd5b60008060008060408587031215614a7d57600080fd5b843567ffffffffffffffff80821115614a9557600080fd5b614aa188838901614a25565b90965094506020870135915080821115614aba57600080fd5b50614ac787828801614a25565b95989497509550505050565b60008060408385031215614ae657600080fd5b50508035926020909101359150565b60008083601f840112614b0757600080fd5b50813567ffffffffffffffff811115614b1f57600080fd5b6020830191508360208260051b8501011115610feb57600080fd5b60008060008060408587031215614b5057600080fd5b843567ffffffffffffffff80821115614b6857600080fd5b614aa188838901614af5565b8015158114612fce57600080fd5b803561323e81614b74565b600080600060408486031215614ba257600080fd5b833567ffffffffffffffff811115614bb957600080fd5b614bc586828701614af5565b9094509250506020840135614bd981614b74565b809150509250925092565b600080600080600060608688031215614bfc57600080fd5b85359450602086013567ffffffffffffffff80821115614c1b57600080fd5b614c2789838a01614a25565b90965094506040880135915080821115614c4057600080fd5b50614c4d88828901614a25565b969995985093965092949392505050565b600080600060408486031215614c7357600080fd5b614c7c8461498d565b9250602084013567ffffffffffffffff811115614c9857600080fd5b614ca486828701614a25565b9497909650939450505050565b600060208284031215614cc357600080fd5b813561219881614b74565b60008060408385031215614ce157600080fd5b82359150614cf16020840161498d565b90509250929050565b600080600060608486031215614d0f57600080fd5b83359250614a156020850161498d565b60008060408385031215614d3257600080fd5b614d3b8361498d565b91506020830135614d4b81614b74565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015614d975783516001600160a01b031683529284019291840191600101614d72565b50909695505050505050565b600080600060408486031215614db857600080fd5b83359250602084013567ffffffffffffffff811115614c9857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614e2e57614e2e614dd6565b604052919050565b600067ffffffffffffffff831115614e5057614e50614dd6565b614e636020601f19601f86011601614e05565b9050828152838383011115614e7757600080fd5b828260208301376000602084830101529392505050565b60008060008060808587031215614ea457600080fd5b614ead8561498d565b9350614ebb6020860161498d565b925060408501359150606085013567ffffffffffffffff811115614ede57600080fd5b8501601f81018713614eef57600080fd5b614efe87823560208401614e36565b91505092959194509250565b600082601f830112614f1b57600080fd5b8135602067ffffffffffffffff821115614f3757614f37614dd6565b8160051b614f46828201614e05565b9283528481018201928281019087851115614f6057600080fd5b83870192505b84831015614f8657614f778361498d565b82529183019190830190614f66565b979650505050505050565b600080600060608486031215614fa657600080fd5b83359250602084013567ffffffffffffffff811115614fc457600080fd5b614fd086828701614f0a565b9250506040840135614bd981614b74565b600080600080600060808688031215614ff957600080fd5b6150028661498d565b9450602086013567ffffffffffffffff81111561501e57600080fd5b61502a88828901614a25565b909550935061503d90506040870161498d565b949793965091946060013592915050565b6000806000806060858703121561506457600080fd5b61506d8561498d565b935060208501356fffffffffffffffffffffffffffffffff8116811461509257600080fd5b9250604085013567ffffffffffffffff8111156150ae57600080fd5b614ac787828801614a25565b600080604083850312156150cd57600080fd5b6150d68361498d565b9150614cf16020840161498d565b600082601f8301126150f557600080fd5b61219883833560208501614e36565b6000806000806000806000806000806101408b8d03121561512457600080fd5b8a3567ffffffffffffffff8082111561513c57600080fd5b6151488e838f016150e4565b9b5060208d013591508082111561515e57600080fd5b61516a8e838f016150e4565b9a5060408d013591508082111561518057600080fd5b61518c8e838f016150e4565b995061519a60608e0161498d565b985060808d013597506151af60a08e0161498d565b965060c08d01359150808211156151c557600080fd5b506151d28d828e01614f0a565b9450506151e160e08c01614b82565b92506151f06101008c0161498d565b91506151ff6101208c0161498d565b90509295989b9194979a5092959850565b600181811c9082168061522457607f821691505b602082108103613866577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60408152600061529b6040830186614935565b82810360208401526152ae81858761525d565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417610a6b57610a6b6152b8565b600082615334577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000600019820361534c5761534c6152b8565b5060010190565b80820180821115610a6b57610a6b6152b8565b81810381811115610a6b57610a6b6152b8565b601f821115611359576000816000526020600020601f850160051c810160208610156153a25750805b601f850160051c820191505b8181101561287e578281556001016153ae565b815167ffffffffffffffff8111156153db576153db614dd6565b6153ef816153e98454615210565b84615379565b602080601f831160018114615424576000841561540c5750858301515b600019600386901b1c1916600185901b17855561287e565b600085815260208120601f198616915b8281101561545357888601518255948401946001909101908401615434565b50858210156154715787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b67ffffffffffffffff8311156154c8576154c8614dd6565b6154dc836154d68354615210565b83615379565b6000601f84116001811461551057600085156154f85750838201355b600019600387901b1c1916600186901b17835561375d565b600083815260209020601f19861690835b828110156155415786850135825560209485019460019092019101615521565b508682101561555e5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152600061250660208301848661525d565b6040815260006155976040830185614935565b82810360208401526155a98185614935565b95945050505050565b6000602082840312156155c457600080fd5b815161219881614b74565b60006001600160a01b038087168352808616602084015250836040830152608060608301526152ae6080830184614935565b60006020828403121561561357600080fd5b8151612198816148c6565b600080845461562c81615210565b600182811680156156445760018114615677576156a6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841687528215158302870194506156a6565b8860005260208060002060005b8581101561569d5781548a820152908401908201615684565b50505082870194505b505050507f2f00000000000000000000000000000000000000000000000000000000000000815283516156e0816001840160208801614911565b01600101949350505050565b6000816156fb576156fb6152b8565b506000190190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220409bb51f297d0934d09c97dd0db5f662818d086685b35b7668b02d3c30ac583264736f6c634300081600330000000000000000000000000000000000000000000000000000000000000001