[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AddressAlreadyMinted", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [], "name": "AddressNotSigned", "type": "error" }, { "inputs": [], "name": "AlreadyWithdrawn", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC1155InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC1155InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "idsLength", "type": "uint256" }, { "internalType": "uint256", "name": "valuesLength", "type": "uint256" } ], "name": "ERC1155InvalidArrayLength", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC1155InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC1155InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC1155InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC1155MissingApprovalForAll", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "implementation", "type": "address" } ], "name": "ERC1967InvalidImplementation", "type": "error" }, { "inputs": [], "name": "ERC1967NonPayable", "type": "error" }, { "inputs": [], "name": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "InValdidTokenId", "type": "error" }, { "inputs": [], "name": "InsufficientETHBalance", "type": "error" }, { "inputs": [], "name": "InsufficientTokenBalance", "type": "error" }, { "inputs": [], "name": "InvalidClaimFee", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "InvalidMintSchedule", "type": "error" }, { "inputs": [], "name": "InvalidTo", "type": "error" }, { "inputs": [], "name": "NotArtCreator", "type": "error" }, { "inputs": [], "name": "NotEnded", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [], "name": "NotPhiFactory", "type": "error" }, { "inputs": [], "name": "NotStarted", "type": "error" }, { "inputs": [], "name": "OverMaxAllowedToMint", "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": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [], "name": "TokenNotTransferable", "type": "error" }, { "inputs": [], "name": "TxOriginMismatch", "type": "error" }, { "inputs": [], "name": "UUPSUnauthorizedCallContext", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "UUPSUnsupportedProxiableUUID", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "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": "recipient", "type": "address" }, { "indexed": true, "internalType": "address", "name": "artistRewardReceiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "referrer", "type": "address" }, { "indexed": false, "internalType": "address", "name": "verifier", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "bytes32", "name": "data", "type": "bytes32" } ], "name": "ArtClaimedData", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "artId", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "uri", "type": "string" } ], "name": "ArtCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "credentialId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "protocolFeeDestination", "type": "address" }, { "indexed": false, "internalType": "address", "name": "phiRewardsAddress", "type": "address" }, { "indexed": false, "internalType": "string", "name": "verificationType", "type": "string" } ], "name": "InitializePhiNFT1155", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "tokenURI", "type": "string" } ], "name": "MintComment", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferStarted", "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": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "components": [ { "internalType": "uint32", "name": "royaltyMintSchedule", "type": "uint32" }, { "internalType": "uint32", "name": "royaltyBPS", "type": "uint32" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" } ], "indexed": false, "internalType": "struct ICreatorRoyaltiesControl.RoyaltyConfiguration", "name": "configuration", "type": "tuple" } ], "name": "UpdatedRoyalties", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "stateMutability": "payable", "type": "fallback" }, { "inputs": [], "name": "UPGRADE_INTERFACE_VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "artId_", "type": "string" }, { "internalType": "address", "name": "minter_", "type": "address" }, { "internalType": "address", "name": "ref_", "type": "address" }, { "internalType": "address", "name": "verifier_", "type": "address" }, { "internalType": "uint256", "name": "quantity_", "type": "uint256" }, { "internalType": "bytes32", "name": "data_", "type": "bytes32" }, { "internalType": "string", "name": "imageURI_", "type": "string" } ], "name": "claimFromFactory", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "artId_", "type": "string" }, { "internalType": "string", "name": "uri_", "type": "string" } ], "name": "createArtFromFactory", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "credentialId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "credentialType", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "exists", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" } ], "name": "getArtId", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "artId_", "type": "string" } ], "name": "getArtInfoFromFactory", "outputs": [ { "components": [ { "internalType": "address", "name": "artCreator", "type": "address" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "artAddress", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "mintFee", "type": "uint256" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "uint256", "name": "maxSupply", "type": "uint256" }, { "internalType": "uint256", "name": "numberMinted", "type": "uint256" }, { "internalType": "bool", "name": "soulBounded", "type": "bool" } ], "internalType": "struct IPhiFactory.ArtData", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPhiFactoryContract", "outputs": [ { "internalType": "contract IPhiFactory", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getRoyalties", "outputs": [ { "components": [ { "internalType": "uint32", "name": "royaltyMintSchedule", "type": "uint32" }, { "internalType": "uint32", "name": "royaltyBPS", "type": "uint32" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" } ], "internalType": "struct ICreatorRoyaltiesControl.RoyaltyConfiguration", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "artId_", "type": "string" } ], "name": "getTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "credentialId_", "type": "uint256" }, { "internalType": "address", "name": "protocolFeeDestination_", "type": "address" }, { "internalType": "address", "name": "phiRewardsContract_", "type": "address" }, { "internalType": "string", "name": "verificationType_", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "merkleClaim", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" } ], "name": "mintFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "phiFactoryContract", "outputs": [ { "internalType": "contract IPhiFactory", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "phiRewardsContract", "outputs": [ { "internalType": "contract IPhiRewards", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "protocolFeeDestination", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "royalties", "outputs": [ { "internalType": "uint32", "name": "royaltyMintSchedule", "type": "uint32" }, { "internalType": "uint32", "name": "royaltyBPS", "type": "uint32" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from_", "type": "address" }, { "internalType": "address", "name": "to_", "type": "address" }, { "internalType": "uint256[]", "name": "ids_", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "values_", "type": "uint256[]" }, { "internalType": "bytes", "name": "data_", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from_", "type": "address" }, { "internalType": "address", "name": "to_", "type": "address" }, { "internalType": "uint256", "name": "id_", "type": "uint256" }, { "internalType": "uint256", "name": "value_", "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": "baseURI_", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" }, { "internalType": "string", "name": "uri_", "type": "string" } ], "name": "setTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "signatureClaim", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" } ], "name": "soulBounded", "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": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unPause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" }, { "components": [ { "internalType": "uint32", "name": "royaltyMintSchedule", "type": "uint32" }, { "internalType": "uint32", "name": "royaltyBPS", "type": "uint32" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" } ], "internalType": "struct ICreatorRoyaltiesControl.RoyaltyConfiguration", "name": "configuration", "type": "tuple" } ], "name": "updatedRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" }, { "internalType": "address", "name": "holder_", "type": "address" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "verificationType", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60e06040523060805261271060a052736d83cac25cfacdc7035bed947b92b64e6a8b809060c05234801561003257600080fd5b5061003b610040565b6100f2565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100905760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100ef5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805160a05160c051614f2961012f6000396000611f14015260006112440152600081816126f10152818161271a01526128cf0152614f296000f3fe6080604052600436106102fc5760003560e01c8063715018a61161018d578063a747a3ea116100e0578063e30c39781161008f578063f242432a1161006c578063f242432a14610a05578063f2fde38b14610a25578063f50b31b714610a45578063f7b188a514610a4d57005b8063e30c397814610980578063e752c44a14610995578063e985e9c51461099d57005b8063bd85b039116100bd578063bd85b03914610901578063d82109361461094d578063db968e081461096257005b8063a747a3ea14610842578063ad3cb1cc14610862578063bb3bafd6146108ab57005b80638a35ace31161013c57806395d89b411161011957806395d89b41146107f7578063a22cb4651461080c578063a3c0f0b71461082c57005b80638a35ace3146107af5780638da5cb5b146107cf5780638efc0c46146107e457005b80637ab9ffc91161016a5780637ab9ffc9146106f75780637f77f574146107175780638456cb591461079a57005b8063715018a6146106ad578063730b4a89146106c257806379ba5097146106e257005b80632e17b05b116102505780634f558e79116101ff57806355f804b3116101dc57806355f804b3146106215780635924b71b146106415780635c975abb146106615780636c0360eb1461069857005b80634f558e79146105aa57806352d1902d146105f857806354fd4d501461060d57005b80634ce7957c1161022d5780634ce7957c146105325780634e1273f41461056a5780634f1ef2861461059757005b80632e17b05b146104ea5780632eb2c2d6146104ff5780633246b76c1461051f57005b806318160ddd116102ac5780632562b0c7116102895780632562b0c71461045e5780632a55205a1461047e5780632d61f8eb146104bd57005b806318160ddd146103ea5780631e7663bc1461041e578063227203181461043e57005b80630b12d136116102da5780630b12d1361461038a5780630e89341c146103aa578063162094c4146103ca57005b8062fdd58e1461030557806301ffc9a71461033857806306fdde031461036857005b3661030357005b005b34801561031157600080fd5b50610325610320366004613993565b610a62565b6040519081526020015b60405180910390f35b34801561034457600080fd5b506103586103533660046139ed565b610aab565b604051901515815260200161032f565b34801561037457600080fd5b5061037d610b4d565b60405161032f9190613a5a565b34801561039657600080fd5b5061037d6103a5366004613a6d565b610bdb565b3480156103b657600080fd5b5061037d6103c5366004613a6d565b610c7d565b3480156103d657600080fd5b506103036103e5366004613bb1565b610cbe565b3480156103f657600080fd5b507f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154610325565b34801561042a57600080fd5b50610325610439366004613c41565b610e7c565b34801561044a57600080fd5b50610358610459366004613a6d565b610ea7565b34801561046a57600080fd5b50610303610479366004613c83565b610f49565b34801561048a57600080fd5b5061049e610499366004613cef565b611232565b604080516001600160a01b03909316835260208301919091520161032f565b3480156104c957600080fd5b506104dd6104d8366004613c41565b611293565b60405161032f9190613d11565b3480156104f657600080fd5b5061037d61139a565b34801561050b57600080fd5b5061030361051a366004613e41565b6113a7565b61030361052d366004613eef565b6114e3565b34801561053e57600080fd5b50603d54610552906001600160a01b031681565b6040516001600160a01b03909116815260200161032f565b34801561057657600080fd5b5061058a610585366004613fb2565b611768565b60405161032f91906140a6565b6103036105a53660046140b9565b61184e565b3480156105b657600080fd5b506103586105c5366004613a6d565b60009081527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e28006020526040902054151590565b34801561060457600080fd5b5061032561186d565b34801561061957600080fd5b506001610325565b34801561062d57600080fd5b5061030361063c3660046140f3565b61189c565b34801561064d57600080fd5b50603454610552906001600160a01b031681565b34801561066d57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610358565b3480156106a457600080fd5b5061037d6118b0565b3480156106b957600080fd5b506103036118bd565b3480156106ce57600080fd5b506103036106dd366004614149565b6118d1565b3480156106ee57600080fd5b50610303611a7d565b34801561070357600080fd5b50603354610552906001600160a01b031681565b34801561072357600080fd5b5061076e610732366004613a6d565b60006020819052908152604090205463ffffffff808216916401000000008104909116906801000000000000000090046001600160a01b031683565b6040805163ffffffff94851681529390921660208401526001600160a01b03169082015260600161032f565b3480156107a657600080fd5b50610303611ade565b3480156107bb57600080fd5b506103256107ca366004613a6d565b611aee565b3480156107db57600080fd5b50610552611b8f565b6103256107f23660046141d7565b611bc4565b34801561080357600080fd5b5061037d611d88565b34801561081857600080fd5b5061030361082736600461423f565b611d95565b34801561083857600080fd5b50610325603f5481565b34801561084e57600080fd5b5061037d61085d366004614278565b611da0565b34801561086e57600080fd5b5061037d6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156108b757600080fd5b506108cb6108c6366004613a6d565b611e57565b60408051825163ffffffff908116825260208085015190911690820152918101516001600160a01b03169082015260600161032f565b34801561090d57600080fd5b5061032561091c366004613a6d565b60009081527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604090205490565b34801561095957600080fd5b5061037d611f3e565b34801561096e57600080fd5b506033546001600160a01b0316610552565b34801561098c57600080fd5b50610552611f4b565b610303611f74565b3480156109a957600080fd5b506103586109b836600461429d565b6001600160a01b0391821660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45016020908152604080832093909416825291909152205460ff1690565b348015610a1157600080fd5b50610303610a203660046142cb565b612108565b348015610a3157600080fd5b50610303610a40366004614334565b612211565b6103036122ae565b348015610a5957600080fd5b50610303612409565b60008181527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500602090815260408083206001600160a01b03861684529091529020545b92915050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161480610b3e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f1617086b00000000000000000000000000000000000000000000000000000000145b80610aa55750610aa582612419565b60368054610b5a90614351565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8690614351565b8015610bd35780601f10610ba857610100808354040283529160200191610bd3565b820191906000526020600020905b815481529060010190602001808311610bb657829003601f168201915b505050505081565b6000818152603a60205260409020805460609190610bf890614351565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2490614351565b8015610c715780601f10610c4657610100808354040283529160200191610c71565b820191906000526020600020905b815481529060010190602001808311610c5457829003601f168201915b50505050509050919050565b6060603e603a6000848152602001908152602001600020600101604051602001610ca8929190614417565b6040516020818303038152906040529050919050565b6000828152603960205260408120805484929190610cdb90614351565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0790614351565b8015610d545780601f10610d2957610100808354040283529160200191610d54565b820191906000526020600020905b815481529060010190602001808311610d3757829003601f168201915b50506033546040517f0d9e9daf0000000000000000000000000000000000000000000000000000000081529495506000946001600160a01b039091169350630d9e9daf9250610da891508590600401613a5a565b61014060405180830381865afa158015610dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dea9190614442565b604001519050336001600160a01b03821614801590610e225750610e0c611b8f565b6001600160a01b0316336001600160a01b031614155b15610e59576040517f5336652700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000858152603a60205260409020600101610e748582614529565b505050505050565b600060388383604051610e90929190614625565b908152602001604051809103902054905092915050565b60335460008281526039602052604080822090517f0d9e9daf00000000000000000000000000000000000000000000000000000000815291926001600160a01b031691630d9e9daf91610efc91600401614635565b61014060405180830381865afa158015610f1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3e9190614442565b610120015192915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610f945750825b905060008267ffffffffffffffff166001148015610fb15750303b155b905081158015610fbf575080155b15610ff6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156110575784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b611060336124fc565b61106861250d565b61107061251d565b600160355560408051808201909152601881527f68747470733a2f2f7777772e617277656176652e6e65742f00000000000000006020820152603e906110b69082614529565b50603f8990556110c58961252d565b6040516020016110d591906146c5565b604051602081830303815290604052603690816110f29190614529565b506110fc8961252d565b60405160200161110c919061470a565b604051602081830303815290604052603790816111299190614529565b5060338054337fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556034805482166001600160a01b038a811691909117909155603d8054909216908a1617905560416111888782614529565b507fe4a79606e0b7edc58b0d6597231040e470837999f80edb9f832806e1439acfad898989896040516111be949392919061474f565b60405180910390a183156112275784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b600080600061124085611e57565b90507f000000000000000000000000000000000000000000000000000000000000000084826020015163ffffffff1661127991906147ba565b61128391906147d1565b6040909101519590945092505050565b61130660405180610140016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b6033546040517f0d9e9daf0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690630d9e9daf906113519086908690600401614837565b61014060405180830381865afa15801561136f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113939190614442565b9392505050565b60408054610b5a90614351565b60005b8351811015611427576001600160a01b038616158015906113e857506113e88482815181106113db576113db61484b565b6020026020010151610ea7565b1561141f576040517fc8fb086200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001016113aa565b50336001600160a01b038616811480159061148757506001600160a01b0380871660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209385168352929052205460ff16155b156114d6576040517fe237d9220000000000000000000000000000000000000000000000000000000081526001600160a01b038083166004830152871660248201526044015b60405180910390fd5b610e748686868686612571565b6114eb612604565b6033546001600160a01b0316331461152f576040517f04117f5500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060388a8a604051611543929190614625565b90815260200160405180910390205490508060000361158e576040517f4ea0703b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61159c888287868689612660565b6033546040517f0d9e9daf0000000000000000000000000000000000000000000000000000000081526000916001600160a01b031690630d9e9daf906115e8908e908e90600401614837565b61014060405180830381865afa158015611606573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162a9190614442565b602001519050600089828a8a60405160200161166f94939291906001600160a01b03948516815292841660208401529083166040830152909116606082015260800190565b60408051601f19818403018152919052603454603f549192506001600160a01b03169063a2838fee9034908f908f908c6116a88a611aee565b886040518863ffffffff1660e01b81526004016116ca9695949392919061487a565b6000604051808303818588803b1580156116e357600080fd5b505af11580156116f7573d6000803e3d6000fd5b5050604080516001600160a01b038d81168252602082018990529181018c9052606081018b9052818e1694508682169350908e1691507ffac5663255378c896e3ce87766fd54d1d41205eeccb6bcca7856f3b777c25e819060800160405180910390a4505050505050505050505050565b606081518351146117b257815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016114cd565b6000835167ffffffffffffffff8111156117ce576117ce613a86565b6040519080825280602002602001820160405280156117f7578160200160208202803683370190505b50905060005b84518110156118465760208082028601015161182190602080840287010151610a62565b8282815181106118335761183361484b565b60209081029190910101526001016117fd565b509392505050565b6118566126e6565b61185f826127b6565b61186982826127be565b5050565b60006118776128c4565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6118a4612926565b603e6118698282614529565b603e8054610b5a90614351565b6118c5612926565b6118cf6000612971565b565b60008281526039602052604081208054849291906118ee90614351565b80601f016020809104026020016040519081016040528092919081815260200182805461191a90614351565b80156119675780601f1061193c57610100808354040283529160200191611967565b820191906000526020600020905b81548152906001019060200180831161194a57829003601f168201915b50506033546040517f0d9e9daf0000000000000000000000000000000000000000000000000000000081529495506000946001600160a01b039091169350630d9e9daf92506119bb91508590600401613a5a565b61014060405180830381865afa1580156119d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fd9190614442565b604001519050336001600160a01b03821614801590611a355750611a1f611b8f565b6001600160a01b0316336001600160a01b031614155b15611a6c576040517f5336652700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a7685856129c1565b5050505050565b3380611a87611f4b565b6001600160a01b031614611ad2576040517f118cdaa70000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016114cd565b611adb81612971565b50565b611ae6612926565b6118cf612b18565b60335460008281526039602052604080822090517f0d9e9daf00000000000000000000000000000000000000000000000000000000815291926001600160a01b031691630d9e9daf91611b4391600401614635565b61014060405180830381865afa158015611b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b859190614442565b6080015192915050565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b6033546000906001600160a01b03163314611c0b576040517f04117f5500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c13612604565b60408051808201825284815260208082018590526035546000908152603a9091529190912081518190611c469082614529565b5060208201516001820190611c5b9082614529565b50905050603554603884604051611c7291906148bf565b9081526040805160209281900383019020929092556035546000908152603990915220611c9f8482614529565b507fe8d11346c55ec710d7fc80e67256850e12a4b81639cc2b24bcaaf6bdf45a42408360355484604051611cd5939291906148db565b60405180910390a16035805460018101909155603354604080517fff6474a200000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ff6474a29160048083019260209291908290030181865afa158015611d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6f9190614906565b603d54909150611846906001600160a01b031682612b8d565b60378054610b5a90614351565b611869338383612ba9565b6000828152603c602090815260408083206001600160a01b03851684529091529020805460609190611dd190614351565b80601f0160208091040260200160405190810160405280929190818152602001828054611dfd90614351565b8015611e4a5780601f10611e1f57610100808354040283529160200191611e4a565b820191906000526020600020905b815481529060010190602001808311611e2d57829003601f168201915b5050505050905092915050565b60408051606081018252600080825260208201819052918101919091526000828152602081905260409020546801000000000000000090046001600160a01b031615611ef25750600090815260208181526040918290208251606081018452905463ffffffff808216835264010000000082041692820192909252680100000000000000009091046001600160a01b03169181019190915290565b505060408051606081018252600081526101f460208201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169181019190915290565b60418054610b5a90614351565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00611bb4565b6000808080808080611f89366004818461491f565b810190611f969190614954565b96509650965096509650965096506000611faf85610bdb565b90506000611fc56033546001600160a01b031690565b90506000816001600160a01b03166338db5920846040518263ffffffff1660e01b8152600401611ff59190613a5a565b600060405180830381865afa158015612012573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261203a9190810190614a50565b905060008a898360000151866040516020016120599493929190614b21565b60408051601f198184030181526060830182528a8352602083018a905282820188905290517fb8dbe8190000000000000000000000000000000000000000000000000000000081529092506001600160a01b0385169163b8dbe8199134916120c9918f9187918d90600401614b7e565b6000604051808303818588803b1580156120e257600080fd5b505af11580156120f6573d6000803e3d6000fd5b50505050505050505050505050505050565b6001600160a01b03851615801590612124575061212483610ea7565b1561215b576040517fc8fb086200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336001600160a01b03861681148015906121ba57506001600160a01b0380871660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209385168352929052205460ff16155b15612204576040517fe237d9220000000000000000000000000000000000000000000000000000000081526001600160a01b038083166004830152871660248201526044016114cd565b610e748686868686612c7d565b612219612926565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081178255612275611b8f565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b60008080808080808080806122c6366004818461491f565b8101906122d39190614bf3565b995099509950995099509950995099509950995060006122f286610bdb565b905060006123086033546001600160a01b031690565b9050600085898c8c868860405160200161232796959493929190614ca4565b604051602081830303815290604052905060008d8d604051602001612356929190918252602082015260400190565b60408051601f198184030181526060830182528b8352602083018b905282820189905290517fa736244e0000000000000000000000000000000000000000000000000000000081529092506001600160a01b0385169063a736244e9034906123c690869088908790600401614cf1565b6000604051808303818588803b1580156123df57600080fd5b505af11580156123f3573d6000803e3d6000fd5b5050505050505050505050505050505050505050565b612411612926565b6118cf612d3e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a260000000000000000000000000000000000000000000000000000000014806124ac57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b80610aa557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610aa5565b612504612d96565b611adb81612dfd565b612515612d96565b6118cf612e48565b612525612d96565b6118cf612e7b565b60606080604051019050602081016040526000815280600019835b928101926030600a8206018453600a900480612548575050819003601f19909101908152919050565b6001600160a01b0384166125b4576040517f57f447ce000000000000000000000000000000000000000000000000000000008152600060048201526024016114cd565b6001600160a01b0385166125f7576040517f01a83514000000000000000000000000000000000000000000000000000000008152600060048201526024016114cd565b611a768585858585612ea9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156118cf576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000858152603b602090815260408083206001600160a01b038a16808552908352818420859055888452603c835281842090845290915290206126a4838583614d2a565b50610e748686866040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250612efc565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061277f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166127737f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156118cf576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611adb612926565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612818575060408051601f3d908101601f1916820190925261281591810190614906565b60015b612859576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024016114cd565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146128b5576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016114cd565b6128bf8383612f72565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118cf576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3361292f611b8f565b6001600160a01b0316146118cf576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016114cd565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815561186982612fc8565b805163ffffffff16156129d357600081525b60408101516001600160a01b03161580156129f857506000816020015163ffffffff16115b15612a2f576040517f0d9b92f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526020818152604091829020835181548584018051878701805163ffffffff9586167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909516851764010000000093871693909302929092177fffffffff0000000000000000000000000000000000000000ffffffffffffffff16680100000000000000006001600160a01b039384160217909555865192835290519092169381019390935290511691810191909152339083907f5837d55897cfc337f160a71d7b63a047abd50a3a8834f1c5d70f338846358c6d9060600160405180910390a35050565b612b20612604565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b60003860003884865af16118695763b12d13eb6000526004601cfd5b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45006001600160a01b038316612c0d576040517fced3e100000000000000000000000000000000000000000000000000000000008152600060048201526024016114cd565b6001600160a01b038481166000818152600184016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b6001600160a01b038416612cc0576040517f57f447ce000000000000000000000000000000000000000000000000000000008152600060048201526024016114cd565b6001600160a01b038516612d03576040517f01a83514000000000000000000000000000000000000000000000000000000008152600060048201526024016114cd565b60408051600180825260208201869052818301908152606082018590526080820190925290612d358787848487612ea9565b50505050505050565b612d46613051565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612b6f565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166118cf576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e05612d96565b6001600160a01b038116611ad2576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024016114cd565b612e50612d96565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b612e83612d96565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b612eb5858585856130ac565b6001600160a01b03841615611a765782513390600103612eee5760208481015190840151612ee783898985858961321c565b5050610e74565b610e748187878787876133bc565b6001600160a01b038416612f3f576040517f57f447ce000000000000000000000000000000000000000000000000000000008152600060048201526024016114cd565b60408051600180825260208201869052818301908152606082018590526080820190925290610e74600087848487612ea9565b612f7b82613508565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612fc0576128bf82826135b0565b611869613626565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166118cf576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e28006130d98585858561365e565b6001600160a01b038516613187576000805b845181101561316b5760008482815181106131085761310861484b565b602002602001015190508084600001600088858151811061312b5761312b61484b565b6020026020010151815260200190815260200160002060008282546131509190614e26565b9091555061316090508184614e26565b9250506001016130eb565b50808260010160008282546131809190614e26565b9091555050505b6001600160a01b038416611a76576000805b84518110156132085760008482815181106131b6576131b661484b565b60200260200101519050808460000160008885815181106131d9576131d961484b565b602090810291909101810151825281019190915260400160002080549190910390559190910190600101613199565b506001820180549190910390555050505050565b6001600160a01b0384163b15610e74576040517ff23a6e610000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063f23a6e61906132799089908990889088908890600401614e39565b6020604051808303816000875af19250505080156132b4575060408051601f3d908101601f191682019092526132b191810190614e7c565b60015b613336573d8080156132e2576040519150601f19603f3d011682016040523d82523d6000602084013e6132e7565b606091505b50805160000361332e576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024016114cd565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014612d35576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024016114cd565b6001600160a01b0384163b15610e74576040517fbc197c810000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063bc197c81906134199089908990889088908890600401614e99565b6020604051808303816000875af1925050508015613454575060408051601f3d908101601f1916820190925261345191810190614e7c565b60015b613482573d8080156132e2576040519150601f19603f3d011682016040523d82523d6000602084013e6132e7565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014612d35576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024016114cd565b806001600160a01b03163b600003613557576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016114cd565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516135cd91906148bf565b600060405180830381855af49150503d8060008114613608576040519150601f19603f3d011682016040523d82523d6000602084013e61360d565b606091505b509150915061361d8583836138c7565b95945050505050565b34156118cf576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805182517f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450091146136c857825182516040517f5b059991000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016114cd565b3360005b84518110156137e7576020818102868101820151908601909101516001600160a01b03891615613798576000828152602086815260408083206001600160a01b038d16845290915290205481811015613771576040517f03dee4c50000000000000000000000000000000000000000000000000000000081526001600160a01b038b1660048201526024810182905260448101839052606481018490526084016114cd565b6000838152602087815260408083206001600160a01b038e16845290915290209082900390555b6001600160a01b038816156137dd576000828152602086815260408083206001600160a01b038c168452909152812080548392906137d7908490614e26565b90915550505b50506001016136cc565b5083516001036138685760208401516000906020850151909150866001600160a01b0316886001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051613859929190918252602082015260400190565b60405180910390a45050610e74565b846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516138b7929190614ef7565b60405180910390a4505050505050565b6060826138dc576138d78261393c565b611393565b81511580156138f357506001600160a01b0384163b155b15613935576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016114cd565b5092915050565b80511561394c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381168114611adb57600080fd5b600080604083850312156139a657600080fd5b82356139b18161397e565b946020939093013593505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611adb57600080fd5b6000602082840312156139ff57600080fd5b8135611393816139bf565b60005b83811015613a25578181015183820152602001613a0d565b50506000910152565b60008151808452613a46816020860160208601613a0a565b601f01601f19169290920160200192915050565b6020815260006113936020830184613a2e565b600060208284031215613a7f57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610140810167ffffffffffffffff81118282101715613ad957613ad9613a86565b60405290565b6040516080810167ffffffffffffffff81118282101715613ad957613ad9613a86565b604051601f8201601f1916810167ffffffffffffffff81118282101715613b2b57613b2b613a86565b604052919050565b600067ffffffffffffffff821115613b4d57613b4d613a86565b50601f01601f191660200190565b600082601f830112613b6c57600080fd5b8135613b7f613b7a82613b33565b613b02565b818152846020838601011115613b9457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215613bc457600080fd5b82359150602083013567ffffffffffffffff811115613be257600080fd5b613bee85828601613b5b565b9150509250929050565b60008083601f840112613c0a57600080fd5b50813567ffffffffffffffff811115613c2257600080fd5b602083019150836020828501011115613c3a57600080fd5b9250929050565b60008060208385031215613c5457600080fd5b823567ffffffffffffffff811115613c6b57600080fd5b613c7785828601613bf8565b90969095509350505050565b60008060008060808587031215613c9957600080fd5b843593506020850135613cab8161397e565b92506040850135613cbb8161397e565b9150606085013567ffffffffffffffff811115613cd757600080fd5b613ce387828801613b5b565b91505092959194509250565b60008060408385031215613d0257600080fd5b50508035926020909101359150565b81516001600160a01b0316815261014081016020830151613d3d60208401826001600160a01b03169052565b506040830151613d5860408401826001600160a01b03169052565b50606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151613dab8285018215159052565b505092915050565b600067ffffffffffffffff821115613dcd57613dcd613a86565b5060051b60200190565b600082601f830112613de857600080fd5b81356020613df8613b7a83613db3565b8083825260208201915060208460051b870101935086841115613e1a57600080fd5b602086015b84811015613e365780358352918301918301613e1f565b509695505050505050565b600080600080600060a08688031215613e5957600080fd5b8535613e648161397e565b94506020860135613e748161397e565b9350604086013567ffffffffffffffff80821115613e9157600080fd5b613e9d89838a01613dd7565b94506060880135915080821115613eb357600080fd5b613ebf89838a01613dd7565b93506080880135915080821115613ed557600080fd5b50613ee288828901613b5b565b9150509295509295909350565b600080600080600080600080600060e08a8c031215613f0d57600080fd5b893567ffffffffffffffff80821115613f2557600080fd5b613f318d838e01613bf8565b909b50995060208c01359150613f468261397e565b90975060408b013590613f588261397e565b90965060608b013590613f6a8261397e565b90955060808b0135945060a08b0135935060c08b01359080821115613f8e57600080fd5b50613f9b8c828d01613bf8565b915080935050809150509295985092959850929598565b60008060408385031215613fc557600080fd5b823567ffffffffffffffff80821115613fdd57600080fd5b818501915085601f830112613ff157600080fd5b81356020614001613b7a83613db3565b82815260059290921b8401810191818101908984111561402057600080fd5b948201945b838610156140475785356140388161397e565b82529482019490820190614025565b9650508601359250508082111561405d57600080fd5b50613bee85828601613dd7565b60008151808452602080850194506020840160005b8381101561409b5781518752958201959082019060010161407f565b509495945050505050565b602081526000611393602083018461406a565b600080604083850312156140cc57600080fd5b82356140d78161397e565b9150602083013567ffffffffffffffff811115613be257600080fd5b60006020828403121561410557600080fd5b813567ffffffffffffffff81111561411c57600080fd5b61412884828501613b5b565b949350505050565b803563ffffffff8116811461414457600080fd5b919050565b600080828403608081121561415d57600080fd5b833592506060601f198201121561417357600080fd5b506040516060810181811067ffffffffffffffff8211171561419757614197613a86565b6040526141a660208501614130565b81526141b460408501614130565b602082015260608401356141c78161397e565b6040820152919491935090915050565b600080604083850312156141ea57600080fd5b823567ffffffffffffffff8082111561420257600080fd5b61420e86838701613b5b565b9350602085013591508082111561422457600080fd5b50613bee85828601613b5b565b8015158114611adb57600080fd5b6000806040838503121561425257600080fd5b823561425d8161397e565b9150602083013561426d81614231565b809150509250929050565b6000806040838503121561428b57600080fd5b82359150602083013561426d8161397e565b600080604083850312156142b057600080fd5b82356142bb8161397e565b9150602083013561426d8161397e565b600080600080600060a086880312156142e357600080fd5b85356142ee8161397e565b945060208601356142fe8161397e565b93506040860135925060608601359150608086013567ffffffffffffffff81111561432857600080fd5b613ee288828901613b5b565b60006020828403121561434657600080fd5b81356113938161397e565b600181811c9082168061436557607f821691505b60208210810361439e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600081546143b181614351565b600182811680156143c957600181146143de5761440d565b60ff198416875282151583028701945061440d565b8560005260208060002060005b858110156144045781548a8201529084019082016143eb565b50505082870194505b5050505092915050565b600061412861442683866143a4565b846143a4565b80516141448161397e565b805161414481614231565b6000610140828403121561445557600080fd5b61445d613ab5565b6144668361442c565b81526144746020840161442c565b60208201526144856040840161442c565b6040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152506101206144d6818501614437565b908201529392505050565b601f8211156128bf576000816000526020600020601f850160051c8101602086101561450a5750805b601f850160051c820191505b81811015610e7457828155600101614516565b815167ffffffffffffffff81111561454357614543613a86565b614557816145518454614351565b846144e1565b602080601f8311600181146145aa57600084156145745750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610e74565b600085815260208120601f198616915b828110156145d9578886015182559484019460019091019084016145ba565b508582101561461557878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b8183823760009101908152919050565b600060208083526000845461464981614351565b806020870152604060018084166000811461466b5760018114614687576146b7565b60ff19851660408a0152604084151560051b8a010195506146b7565b89600052602060002060005b858110156146ae5781548b8201860152908301908801614693565b8a016040019650505b509398975050505050505050565b7f50686920437265642d00000000000000000000000000000000000000000000008152600082516146fd816009850160208701613a0a565b9190910160090192915050565b7f5048492d00000000000000000000000000000000000000000000000000000000815260008251614742816004850160208701613a0a565b9190910160040192915050565b84815260006001600160a01b038086166020840152808516604084015250608060608301526147816080830184613a2e565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417610aa557610aa561478b565b600082614807577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60208152600061412860208301848661480c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60a08152600061488e60a08301888a61480c565b86602084015285604084015284606084015282810360808401526148b28185613a2e565b9998505050505050505050565b600082516148d1818460208701613a0a565b9190910192915050565b6060815260006148ee6060830186613a2e565b84602084015282810360408401526147818185613a2e565b60006020828403121561491857600080fd5b5051919050565b6000808585111561492f57600080fd5b8386111561493c57600080fd5b5050820193919092039150565b80356141448161397e565b600080600080600080600060e0888a03121561496f57600080fd5b873561497a8161397e565b965060208881013567ffffffffffffffff8082111561499857600080fd5b818b0191508b601f8301126149ac57600080fd5b81356149ba613b7a82613db3565b81815260059190911b8301840190848101908e8311156149d957600080fd5b938501935b828510156149f7578435825293850193908501906149de565b9a50614a0891505060408c01614949565b975060608b0135965060808b0135955060a08b0135945060c08b0135925080831115614a3357600080fd5b5050614a418a828b01613b5b565b91505092959891949750929550565b60006020808385031215614a6357600080fd5b825167ffffffffffffffff80821115614a7b57600080fd5b9084019060808287031215614a8f57600080fd5b614a97613adf565b8251614aa28161397e565b81528284015182811115614ab557600080fd5b83019150601f82018713614ac857600080fd5b8151614ad6613b7a82613b33565b8181528886838601011115614aea57600080fd5b614af982878301888701613a0a565b8086840152505060408301516040820152606083015160608201528094505050505092915050565b60006001600160a01b0380871683528086166020840152808516604084015250608060608301526147816080830184613a2e565b805182526020810151602083015260006040820151606060408501526141286060850182613a2e565b6080808252855190820181905260009060209060a0840190828901845b82811015614bb757815184529284019290840190600101614b9b565b5050508381036020850152614bcc8188613a2e565b9150508281036040840152614be18186614b55565b91505082606083015295945050505050565b6000806000806000806000806000806101408b8d031215614c1357600080fd5b8a35995060208b0135985060408b0135614c2c8161397e565b975060608b0135614c3c8161397e565b965060808b0135614c4c8161397e565b955060a08b0135945060c08b0135935060e08b013592506101008b013567ffffffffffffffff811115614c7e57600080fd5b614c8a8d828e01613b5b565b9250506101208b013590509295989b9194979a5092959850565b86815260006001600160a01b038088166020840152808716604084015280861660608401525060c06080830152614cde60c0830185613a2e565b90508260a0830152979650505050505050565b606081526000614d046060830186613a2e565b8281036020840152614d168186613a2e565b905082810360408401526147818185614b55565b67ffffffffffffffff831115614d4257614d42613a86565b614d5683614d508354614351565b836144e1565b6000601f841160018114614da85760008515614d725750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611a76565b600083815260209020601f19861690835b82811015614dd95786850135825560209485019460019092019101614db9565b5086821015614e14577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b80820180821115610aa557610aa561478b565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a06080830152614e7160a0830184613a2e565b979650505050505050565b600060208284031215614e8e57600080fd5b8151611393816139bf565b60006001600160a01b03808816835280871660208401525060a06040830152614ec560a083018661406a565b8281036060840152614ed7818661406a565b90508281036080840152614eeb8185613a2e565b98975050505050505050565b604081526000614f0a604083018561406a565b828103602084015261361d818561406a56fea164736f6c6343000819000a